Laden...

Forenbeiträge von Bananajoe123 Ingesamt 16 Beiträge

21.10.2020 - 08:59 Uhr

Ok, das Argument der Schichten klingt plausibel.
Dann löse ich es doch besser über Events und die Kommunikation mit der Hauptform. Da gibt es ja ein sehr hilfreiches How-To im Forum.

20.10.2020 - 17:07 Uhr

Hallo Forum,

gibt es eine Möglichkeit die Änderung z. B. einer Bool-Variable, die in den Properties Settings angelegt ist, in einem Benutzersteuerelement (also nicht der Mainform) eines Programms zu erkennen.

Ich denke man müsste das über ein Event lösen. Aber meine Programmierkenntnisse reichen dafür nicht aus. Ich habe auch bei der Recherche keine Lösung gefunden, die ich passend fand. Daher die Grundsätzliche Frage, wie so etwas geht.
Falls ich ein Codebeispiel im Forum übersehen habe, könnt ihr auch gerne darauf verweisen.

Beste Grüße und vielen Dank!

20.10.2020 - 13:06 Uhr

Hi,

vielen Dank für die Antwort. Jetzt habe ich doch nach tagelanger Suche den Fehler selbst gefunden.
Im Programm ist noch eine Kommunikation mit einer Steuerung, deren Timer dazwischenfunkt.
Den muss man kurzzeitig deaktivieren.
Dann läuft alles.
Trotzdem Danke für die hilfsbereitschaft.

Grüße!

20.10.2020 - 08:58 Uhr

Hallo Forumsmitglieder,

ich habe eine Frage bezüglich einer Windows-Formsanwendung. Ich möchte gerne in einem Programm einen Scanner ansteuern. Ich habe eine Anwednung nach folgendem Beispiel erstellt:

Beispielcode für eine Scannerapplication

Das Programm funktioniert einwandfrei!
Jetzt habe ich versucht diesen Code in meiner Anwendung zu implementieren, das führt aber zu einem mir unverständlichen Verhalten:

Fall 1)
Wird das Scannen aus dem laufenden Programm gestartet (normaler Anwednungsfall), wird der Code zwar ohne Fehlermeldung ausgeführt, aber das Scannen startet erst, wenn man das Fenster schließt (Schließen Button). Anstatt zu schließen bleibt das Fenster danach aber offen und die Anwendung bedienbar.

Fall2)
Wenn ich das Programm mit Haltepunkten ausführe, wird alles genau, wie programmiert, ausgeführt und der Scanner startet sofort.

Ich habe versucht das Problem mit Haltepunkten "einzukreisen" und gedacht, dass es vielleicht ein Timing-Problem ist, das sich mit System.Threading.Thread.Sleep(); lösen lässt anstatt einen Haltepunkt zu verwenden. Leider ist dies aber nicht der Fall und den Thread anzuhalten ändert nichts.

Ich habe das Gefühl, dass der Scannbefehl zwar gestartet wird, aber in irgendeiner Bearbeitungswarteschlange untergeht. Deshalb meldet die Anwednung, zwar dass der Code ausgeführt wurde, aber es passiert nichts.

Welche Möglichkeiten zum Debuggen gibt es für so ein Verhalten oder besser gefragt, worauf deutet so ein Verhalten denn hin und wonach könnte ich suchen oder womit Abhilfe schaffen?

Da es sich um relativ viel Code handelt, habe ich erst mal darauf verzichtet ihn hier miteinzufügen, kann das aber gerne bei Bedarf nachholen.

15.09.2020 - 10:32 Uhr

Vielen Dank für die Hilfe. Dein Artikel war sehr hilfreich! 👍
Gut ist auch, dass darin auch gängige Fehler aufgelistet sind. Einige davon habe ich bei meiner vorangegangenen Internetsuche selbst gefunden und probiert X(

Gut ist auch, dass es eine schöne Druckansicht gibt. =)

14.09.2020 - 10:40 Uhr

Hallo wissende Forumsmitglieder,

ich habe folgende Aufgabenstellung:

Für eine GUI habe ich in meiner MainForm Buttons, die bei Click verschiedene Benutzersteuerelemente öffnen. Auf jedem dieser Benutzersteuerelemente befindet sich eine Art Notaus-Button.
Wenn dieser jeweils betätigt wird, sollen alle Buttons des gerade aktiven Benutzersteuerelements und die Buttons der MainForm deaktiviert werden, bis der Notausbutton ein zweites mal gedrückt wird. Dann müssen alle Buttons wieder aktiviert werden.

Meine Frage ist, wie man "sauber" Buttons in einer anderen Form deaktivieren kann.
Meine Recherche im Internet hat folgenden Code als Lösung ergeben. Das ist aber nicht besonders zuverlässig bei mehreren Benutzersteuerelementen. Für zwei scheint das zu funktionieren, bei mehreren geht das aber nicht mehr.

FormMain FormM = (FormMain)Application.OpenForms["FormMain"];
FormM.DisableButtons(false);

(DisableButtons als public definierte Methode in FormMain zum deaktivieren der Buttons angelegt)

Was wäre der Richtige Weg bzw. was muss ich in meiner MainForm und in den Benutzersteuerelementen als Code programmieren?

Herzliche Grüße und vielen Dank für die Hilfe

10.08.2020 - 14:06 Uhr

Ok, ich will das gerne so machen, wie ihr sagt, aber dafür bräuchte ich noch einmal eine genauere Beschreibung.
Wie soll ich die UserControls genau anlegen? Wie stelle ich sicher, dass immer nur genau eines offen ist und alle anderen im Hintergund nicht laufen?

Meine Version habe ich so als Codebeispiel im Internet gefunden. Warum genau ist sie schlecht oder ungünstig?

10.08.2020 - 10:01 Uhr

Hallo Th69,

die Verwendung von Benutzersteuerelementen war ein prima Tipp. Das funktioniert einwandfrei.

Ich habe sie folgendermaßen angelegt:

Im User Control selbst:

private static ucMovement _instance;

        
        public static ucMovement Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new ucMovement();
                return _instance;
            }
        }

Ein Button in der Main-Form:

if (!panelTabs.Controls.Contains(UserControls.ucMovement.Instance))
            {
                panelTabs.Controls.Add(UserControls.ucMovement.Instance);
                UserControls.ucMovement.Instance.Dock = DockStyle.Fill;
                UserControls.ucMovement.Instance.BringToFront();
            }
            else
                UserControls.ucMovement.Instance.BringToFront();
07.08.2020 - 14:23 Uhr

Mit Childform meine ich die Form, die in das Panel geladen wird. Die Bezeichnung stammt aus der Methode, in der eine Form in das Panel geladen wird (siehe Codeabschnitt von oben). Letztlich habe ich aber zu meiner Haupt-Form eine "Windows Form" zu dem Projekt hinzugefügt.

Ich habe mir noch einmal das Anleitungs-Video angeschaut und letztlich ist dort doch der gleiche Effekt zu sehen. Scheinbar kann ich das doch nicht so ohne weiters lösen.

Das ganze soll ja eh nur auf einem bestimmten Bildschirm laufen. Dann werde ich das alles auf diesen Anpassen und naja WPF halt dann demnächst.

07.08.2020 - 13:33 Uhr

Also Danke erst mal für die Antworten.
Zunächst: WPF werde ich mir schon noch zu Gemüte führen, das ist aber für meine aktuelle Situation nicht weiterführend.

Dass ein in der Größe verzerrtes Bild auch zu anderen Abständen der buttons führt ist mir klar.
Die Größe der Childform soll aber eigentlich auf die Größe des Panels beschränkt werden. Bei gleich groß definiertem Panel und Childform sollte sich also eigentlich nichts verschieben.
Was aber passiert ist, dass die einzupassende Childform viel zu groß wird.
Wenn ich in jede Ecke meiner Childform einen Button oder irgendwas anderes positioniere, wird das alles abgeschnitten, weil die Form anscheinend zu groß ist. Ich sehe nur was im linken oberen Ausschnitt ist. Diese Verzerrung erklärt auch, warum die Buttons zu große Abstände haben.

07.08.2020 - 12:39 Uhr

Hier noch zur Veranschaulichung: So sollten meine Buttons eigentlich positioniert sein.

07.08.2020 - 12:36 Uhr

Hallo Zusammen,

ich habe mittlerweile Stunden darin investiert, mein Problem zu lösen, aber ich komme nicht auf eine Lösung oder ich weiß einfach nicht, welche Wörter ich zum googlen brauche.

Folgendes Problem:
Ich habe nach folgender "Anleitung" eine Anwendung erstellt (https://rjcodeadvance.com/formulario-modernoiconos-font-awesome-winform-c/). Dabei wird eine Haupt-Form erstellt, in der sich ein Panel befindet. Wird ein Button in der Hauptform gedrückt, wird eine "Childform" in das Panel geladen und angezeigt.

Die Code-Abschnitte dazu sind:

//Methode zum öffnen einer Childform im Main-Programmteil

private void OpenChildForm(Form childForm)
        {
            //open only one form
            if (currentChildForm != null)
            {
                currentChildForm.Close();
            }
            currentChildForm = childForm;
            //End

            childForm.TopLevel = false;
            childForm.FormBorderStyle = FormBorderStyle.None;
            childForm.Dock = DockStyle.Fill;
            panelTabs.Controls.Add(childForm);
            panelTabs.Tag = childForm;
            childForm.BringToFront();
            childForm.Show();
        }

//Clicken eines Buttons zum Laden der neuen Form in das Panel

private void button_Movement_Click(object sender, EventArgs e)
        {   
            OpenChildForm(new Forms.FormMovement());
        }

Laut Angabe des Erstellers wird die Childform dann unverzerrt dargestellt, wenn die Panle-Größe und die Childformgröße übereinstimmen. In meinem Fall habe ich beide auf 1604 x 871 festgelegt.

Anders als im Anleitungsvideo wird meine Childform Verzerrt. Meine Childform wird zwar schon geladen, aber viel zu groß. So wie ich das sehe funktioniert das "Fill" schon, aber es geht von einem viel zu großen Fenster aus oder so. So ist zumindest meine Wahrnehmung.

Ich habe zur veranschaulichung mal ein Bildeingefügt:
Die Childform hat 1604 x 871 Pixel. Der Hintergrund ist auf Rot festgelegt und sollte bei korrekter Darstellung eigentlich gar nicht sichtbar sein.
Der blaue Bereich ist der eingentlich darzustellende Bereich, der in das Panel eingepasst werden sollte. Die Pfeilbuttons, die im Bild rechts sind, sollten eigentlich mittig und ohne Abstand nebeneinander angeordnet sein (so habe ich sie zumindest positioniert. Ich habe dazu auch schon sämltiche Anchor-Eigenschaften durchprobiert. Die ändern leider nichts)
Die grauen Buttons ganz links habe ich in meiner Form am Rand auf die 0-Position geschoben. Nach meinem Verständniss müssten die eigentlich an der Blauen Kante erscheinen, sie erscheinen aber an der roten Kante.
Ich kann mir leider nicht erklären, woher diese Verschiebung bzw. Verzrerrung kommt und wie ich sie beheben kann. Dazu reicht mein aktuelles C# Niveau nicht aus.

Beste Grüße und danke für jede Antwort!

06.08.2020 - 13:08 Uhr

OK Danke, dann werde ich die Lösung mit passenden Bildern wählen.

06.08.2020 - 12:32 Uhr

Ein Weg, der zumindest eine vorübergehende Lösung liefert ist natürlich, meine Hintergrundbilder auf die auf die Pixelzahl der Buttons anzupassen, sodass ich auf die Stretch-Funktion verzichten kann.

Das liefert auch das gewünschte Ergebnis, ist aber blöd, wenn ich die Buttons doch umskalieren muss.

06.08.2020 - 12:25 Uhr

Mir ist gerade noch etwas aufgefallen, womit es zusammenhängen könnte:

Mein Button ist über das Feld statisch in seiner Größe. Ich kann ihn also nicht größer oder kleiner ziehen. Vielleicht müsste man das dynamisch gestalten.

Wobei ich in meinem Fall die Größe der buttons nicht verändert habe. Ich habe sie sogar kopiert. D. h. alle Eigenschaften sind bis auf den Namen und das Hintergrundbild identisch.

06.08.2020 - 12:11 Uhr

Hallo Zusammen,

ich würde gerne eine Benutzeroberfläche mit Buttons als Polygonen gestalten. Dazu habe ich mir eine Klasse erstellt:

class Button_Polygon : Button
    {
        protected override void OnPaint(PaintEventArgs pevent)
        {
            // Create an array of points.
            Point[] myArray = new Point[]
                {
                 new Point(37, 0),
                 new Point(112, 0),
                 new Point(150, 65),
                 new Point(112, 130),
                 new Point(37, 130),
                 new Point(0, 65)
                };

            GraphicsPath grPath = new GraphicsPath();
            grPath.AddPolygon(myArray);
            this.Region = new System.Drawing.Region(grPath);
            base.OnPaint(pevent);
        }
    }

Das funktioniert im Prinzip auch wunderbar. In diese buttons habe ich dann Hintergrundbilder eingefügt und das Layout "gestretched".
Mein Programm besteht aus einer Haupt-Form und mehreren Child-Formen, die in einem Panel der Hauptform angezeigt werden.

In der Hauptform sind die Buttons einwandfrei dargestellt. Aber in den Childformen wird das Hintergrundbild nicht mehr richtig ein das Polygon eingepasst, sondern verzerrt (zu groß) dargestellt.
Prinzipiell glaube ich schon, dass das bild auf irgendeine Weise gestretched wird, denn es ist nicht viel zu groß. Aber es passt eben am Ende doch nicht wirklich.

Vielleicht hatte ja jemand diese problem schon einmal und weiß eine Lösung.

Vielen Dank für die Rückmeldung und beste Grüße!
Alle Childforms und das Panel haben die gleiche Pixelanzahl.