Check Background Color of button on my Form and Print this one

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Check Background Color of button on my Form and Print this one

    Hey, I am just working on a Project for my work (Not for money just for myself too make life easier),
    In my company i work in the documentation and there I have to print Labels for Folders.
    So i thought to myself Why not make a programm in Visual Basic to let it print for me so i dont have to type all of it myself :).
    So here is my What i have done so Far:
    1.The labels need an extra size (I did this size in word by many tries like 10,5cm to 5cm) so I prepared all the numbers in adaance(there are neraly always the same 100) and saved them in a folder and named them correctly like(2.0,2.1,2.2,2.3...)
    So I dont need help and letting the Computer make these Labels they are named and finished.
    2.In my Visual Basic Form I created buttons with the tool and named like the labels and also a Print button
    3.Every time i click a label button the button turns green(I only have 10 buttons at the moment to test things out)
    1.PROBLEM:
    Every time I create a new button i Have to type:
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""

    VB.NET-Quellcode

    1. If ThreeZero.BackColor = Color.LightGray Then
    2. ThreeZero.BackColor = Color.LightGreen
    3. Else : ThreeZero.BackColor = Color.LightGray
    4. End If

    """""""""""""""""""""""""""""""""""""""""""""""""""""
    Is it possible to make that every button gets green If i press it and grey again the next time without having too type it for every button?

    2.PROBLEM:
    Is it possible too look which buttons are (pressed) green and print the documents with them like if TWOZero is pressed that the printer will print the document 2.0 if i Press print?

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    VB.NET-Quellcode

    1. If TwoZero.BackColor = Color.LightGreen Then
    2. myFilenameString = TwoZero.Text
    3. p.Verb = "print"
    4. p.WindowStyle = ProcessWindowStyle.Hidden
    5. p.FileName = "D:\Einleger\" & myFilenameString & ".doc" 'This is the file name
    6. p.UseShellExecute = True
    7. System.Diagnostics.Process.Start(p)
    8. End If

    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    I am stucked with this problem like 4hours now and i dont now how to get further.
    I am really thankfull for anyhelp, but please dont explain too diffcult because I dont Know a lot about Programinng
    Visual Basic 2010
    Windows 10

    *Topic moved* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Hey Hund120!

    First things first, is there any particular reason why you're asking in english?
    Not here to judge, just 'cause your username sounds very german to me and there are a lot of other fora on the world wide web you might prefer over a german one!

    Just fyi:
    I am not a Visual Basic guru and it's been some time since I last worked with it, so you may excuse my inability to give you a code snippet or proper solutions which work in VB.

    I'll try it anyway!

    Problem 1:

    Static way:
    I had to research a bit whether VB supports event handlers or not and it, thankfully, does!
    From what I've found out, you can simply assign a single event handler to all the buttons you need this behaviour for.
    That way you can save a lot of code and you only got to write it once in your back-end.

    Basically:
    * Select all your buttons on the gui editor
    * In the properties panel, scroll down until you find the "click" event entry (you may want to press the Event button on top of the properties panel right beneath the control selection box to let VS only show control events)
    * type any name for the event (make sure you don't collide with other methods, types ect.)
    * press enter, now insert your routine into that method's scope

    If you want to know where I got that from, or you don't really understand what I am talking about, you can find the explanation here:
    docs.microsoft.com/en-us/visua…o-each-label?view=vs-2019

    Dynamic way:
    The method above may work for statically added controls, but what if you might want to dynamically add buttons in future?
    Another way I would do that is to create a new button class which handles all that at underlying scope.

    If you don't know already on how to create a new button control, I found a useful explanation here (starting at point 2):
    docs.microsoft.com/en-us/dotne…ng-windows-forms-controls

    How to:
    * Create the button class
    * Override the OnClick method and insert your desired routine here!
    * Replace your existing ones with your custom ones

    Problem 2:
    To be honest, I don't really get what you mean by that!
    Like, print the buttons' labels? Or as pictures?
    If you had a more elaborate explanation of what you want, that would be awesome!

    ~ Elanda :D

    Edit:
    You better screenshot my answer, as I don't know if this thread will be deleted since it's in english on a german forum.
    Better be quick my friend!
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Elanda“ ()

    Ah ok danke auf deutsch ist es natürlich viel leichter das Problem zu erklären.
    Also Das erste Problem habe ich jetzt gelöst danke dir :D

    Das zweite Problem habe ich so gemeint ich habe Wortdokumente erstellt auf meinem Computer mit den Verschieden Zahlen drinnen, und ich möchte jetzt mit diesem Programm versuchen,
    dass ich als erstes in meinem Fenster die Knöpfe grün markiere die ich ausdrucken will und anschliesend die .doc dateien per Knopf druck alle Zussamen ausdrucke.
    Die knöpfe habe ich genauso gennant wie die .doc Datein im Ordner un deswegen habe ich mir gedacht dass das Programm schaut welche Knöpfe grün sind und diese dann anhand des textes auf den Knöpfen ausdrückt.
    imgur.com/a/em8mXl1
    Sind noch Zwei fotos von dem Fenster und den Datein

    hund120 schrieb:

    Sind noch Zwei fotos
    Nutze die Datei-Anhangs-Funktionalität des Forums:
    Erweiterte Antwort => Dateianhänge => Hochladen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @hund120 Wo liegt das Problem?
    Die CheckBoxen zu malen
    oder
    doc-Dateien zu drucken?

    VB.NET-Quellcode

    1. Dim pr = New Process
    2. pr.StartInfo.FileName = "c:\Temp\test.doc"
    3. pr.StartInfo.Verb = "Print"
    4. pr.Start
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah ok, habe es jetzt so gelöst

    VB.NET-Quellcode

    1. Private Sub Print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Print.Click
    2. Dim p As New System.Diagnostics.ProcessStartInfo()
    3. Dim myFilenameString As String
    4. Dim Filenumber As Double
    5. For i As Integer = 0 To Box1.Items.Count - 1
    6. If Box1.GetItemChecked(i) Then
    7. myFilenameString = (Box1.GetItemText(Box1.Items(i)))
    8. p.Verb = "print"
    9. p.WindowStyle = ProcessWindowStyle.Hidden
    10. p.FileName = "D:\Einleger\" & myFilenameString & ".doc" 'This is the file name
    11. p.UseShellExecute = True
    12. System.Diagnostics.Process.Start(p)
    13. Else
    14. 'Do something if they're not checked
    15. End If
    16. Next
    17. End Sub


    Danke dir aber trotzdem für das schnelle antworten.
    Zwei fragen hätte ich da noch
    1.Wenn ich die Checkbox sortiere der grösse nach aufsteigend kommt 1.11 vor 1.7 kann man das irgendwie ändern?
    2.In meiner Arbeit ist es so dass ein anderer Drucker als Standarddrucker eingestellt ist kann man dass irgendwie in meinem Programm berücksichtigen?

    *CodeTags hinzugefügt* ~NoFear23m
    @hund120 nutze bitte die CodeTags des WBB Editors zur Formatierung von Code. Danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Das liegt wahrscheinlich daran das 1.11 kleiner ist als 1.70 (ich habe die 0 jetzt mal nur angehängt damit du weißt auf was ich hinaus will).
    Also zumindest wenn du sie nach Zahlen sortierst!

    Wie/wo fügst du denn die Checkboxen ein?
    Oder habe ich da jetzt nur was falsch verstanden?
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Achja stimmt daran wird es liegen.
    Die Checkboxen füge ich ein wenn ich auf einen Button drück mit einer Zahl(beispiel 2.1)
    Dann wird der Button grün gerfärbt und ein Eintrag in die Checkbox angelegt.
    Aus dieser Checkbox wird dann aus absteigender Reihenfolge die .doc datein gedruckt
    wenn ich auf den Print button drücke.
    Weil wenn ich Dem Programm sage dass es nur die grünen Drucken soll versucht alle aufeinmal aufzumachen und zu drucken und dann stürtzt das Programm zwar nicht ab aber dafür Word.
    Sieh mal hier, es scheint lustigerweise sogar einen ziemlich aktuellen Beitrag dazu zu geben wie man solche Listen selbst sortiert!
    Da ich ein absoluter VB noob bin, gebe ich dir mal den Link zum Beitrag-Post:
    VB 2015 Sortierung in Listbox

    Lies dir das mal durch!
    Danach könntest du versuchen die Werte, die verglichen werden müssen, in eine Zeichenkette zu konvertieren falls sie es nicht bereits sind.
    Diese spaltest du dann mit dem "." trennzeichen und kannst die Zahlen nach dem konvertieren zu einem Integer-Array dann vergleichen!

    Als Beispiel:
    1.11
    2.7

    Die Zahlen zerlegen, also 1.11 = {1, 11} und 2.7 = {2, 7}

    Dann vergleichst du zuerst die jeweiligen Zahlen an Index 0 in den Arrays miteinander, ist eine kleiner oder größer setzt du sie an ihren Platz. Sind sie gleich, machst du dasselbe noch einmal mit der Zahl an Index 1 in den Arrays bis die Zahl kleiner ist als die vorherige aber größer als die nächste.

    Ich bin mir sicher das es eine performantere Lösung gibt, allerdings müsste ich dafür zuerst den Computer hochfahren und VB runterladen, ich bin gerade Mobil unterwegs.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    @hund120
    1. Sortiere die Daten entsprechend bevor Du die CheckBoxItems erstellst.
    2. Gugst Du Drucken mehrseitiger Dokumente
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!