Avatar billede km2 Nybegynder
22. maj 2009 - 18:45 Der er 6 kommentarer

Hjælp til at finde ekvivalente kommandoer i C# udfra disse VB kommandoer(funktioner) - Hjælp!!!

Jeg har et C# program hvor der genereres nogle tekstbokse i et panel i runtime. Jeg er ved at lave noget offset så tekstindholdet kan udprintes hvor man ønsker det skal udprintes på papir. Derfor har jeg noget eksisterende vb kode som skal laves til C# og der mangler jeg lidt hjælp til at finde lignende funktioner i C# udfra de eksisterende vb funktioner - håber de findes.
Så mit spørgsmål er hvad er C#'s version af Printer.CurrentX og Printer.CurrentY og hvad er C#'s version af TextWidth(string)?
Det kode som jeg citerer fra ser sådan her ud:

Public Sub PrintAlignedTextC(ByRef PosX As Short, ByRef PosY As Short, ByRef s As String)
       
        Printer.CurrentX = PosX - (TextWidth(s) \ 2)
       
        Printer.CurrentY = PosY
       
        Printer.Print(s)
    End Sub
i C# kan man kun kalde Print() men i vb kan man kalde Print(s) med en string indeni. Hvordan får man strengen med?
Avatar billede flashit Nybegynder
22. maj 2009 - 19:38 #1
Ved ikke om det virker. Ikke testet.

public void PrintAlignedTextC(ref short PosX, ref short PosY, ref string s)
{
    Printer.CurrentX = PosX - (TextWidth(s) / 2);
    Printer.CurrentY = PosY;
    Printer();
}
Avatar billede km2 Nybegynder
22. maj 2009 - 19:56 #2
Printer og CurrentX og TextWidth er noget der findes i VB. Det er ikke kald jeg har fundet på. Men hvis man skulle gøre det samme i C# istedet hvad ville disse funktioner så hedde?
Avatar billede windcape Praktikant
22. maj 2009 - 20:30 #3
Der er ingen direkte equiv, så du skal benytte http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx for at lave en tilsvarende funktionalitet.

Derudover er Printer VB6, og ikke VB.NET. C# deler bibliotek med VB.NET, men ikke med VB6.
Avatar billede km2 Nybegynder
22. maj 2009 - 20:47 #4
ok men hvis man skulle gøre noget tilsvarende i C# hvad ville man så gøre? Fordi det kode ovenover bestemmer hvor på papiret det udprintes og når jeg kalder denne funktion så ser det sådan ud:

PrintAlignedTextC(3625 + LeftMgn, 5100 + TopMgn, TextBox[0].Text)

Det må man kunne gøre ligeså godt i C#. Jeg tænkte på om CurrentX og CurrentY kan erstattes af e.X og e.Y. Printer kan man ikke lige gøre. Hvad med TextWidth funktionen, findes der en tilsvarende C# funktion?
Avatar billede windcape Praktikant
22. maj 2009 - 21:08 #5
Du omdanner teksten til et stykke grafik (Graphics g), hvor du så kan måle bredden.

Typisk i forbindelse med at du opretter dit PrintDocument.

Men det er altså langtfra ligeså simpelt som i VB, du skal regne med en 30-50 linjers kode.
Avatar billede km2 Nybegynder
23. maj 2009 - 11:42 #6
Det som jeg forsøger at lave er at der genereres 64 tekstbokse i et panel ved runtime. Når de tekstbokse er lavet har jeg en combobox med 2 items i. Den ene er inch og den anden er mm(millimeter).

Lige nedenunder comboboxen har jeg 2 tekstbokse hvor man kan angive et tal i dem begge f.eks 10 og det betyder så 10 mm margin fra toppen af papiret og 10 mm margin fra venstre af papiret. Programmet skal kunne benyttes på en vilkårlig printer og derfor skal man kunne indtaste denne margin.

Nu var det lavet så nemt i VB eller VB6 som du siger og det vil tage længere tid i C# at lave. Det skal nok også laves på en anden måde da jeg ikke kan komme på 30-50 liniers kode for at løse problemet. Min printfunktion virker fint. Jeg kan godt udprinte de 64 tekstbokse og så starter de med at blive udprintet fra position 0,0. Jeg vil bare gerne kunne lave de omtalte marginer. Vil du hjælpe mig lidt i gang med det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester