Laden...

Forenbeiträge von joerg55 Ingesamt 13 Beiträge

01.12.2023 - 11:39 Uhr

Zitat von Abt

In der UI "warten" ist eh keine gute Idee, weil das implizit bedeuten würde, dass Deine UI blockiert.

Na ja, die gesamte Application wartet ja auch 😉 Sie blockiert sogar ganz explizit. Aber ich habe verstanden, dass das für Labels nicht vorgesehen ist. Ich nutze nun ein globales 'busy-Flag', das ich in den Validierungshandlern setze. Das kann ich dann in der Navigation abfragen. Auf jeden Fall besten Dank für eure Unterstützung.

Gruß Joerg

01.12.2023 - 08:58 Uhr

@BlonderHans,

ich wollte in einer MiniApp Label für die Navigation einsetzen (Ja, ja. Ich weiß, das macht man ja auch nicht 😃 ). Da ist es natürlich doof, wenn die Label nicht auf die Validierung der anderen Controls warten.

01.12.2023 - 08:11 Uhr
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //----------------------------------------------------------------
        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = ((TextBox)sender).Text != "1";
        }

        //----------------------------------------------------------------
        private void textBox2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Klick Textbox2");
        }

        //----------------------------------------------------------------
        private void label1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Klick Label1");
        }
    }
}

Textbox1 setzt e.cancel, wenn ein Wert ungleich '1' eingegeben wird. Klickt man dann auf Textbox2 passiert nichts. Was ja richtig ist. Klickt man auf das Label, wird die Messagebox 'Klick Label1' angezeigt. Warum verhalten sich Textbox2 und Label1 unterschiedlich?

30.11.2023 - 20:24 Uhr

Hi zusammen,

ich habe folgendes Problem: Auf einem Formular sind 2 Textboxen und ein Label. Sofern der validating-Handler von Textbox1 e.cancel auf true setzt, ist Textbox2 nicht mehr selektierbar. Kein Event von Textbox2 wird ausgeführt. Ebenso läßt sich die Anwendung auch nicht mehr schließen, bis der validating-Handler von Textbox1 mit e.cancel = false durchlaufen wird. Das ist das von mir gewünschte Verhalten.

Klickt man aber auf das Label, wird label_click(...), also der Click-Eventhandler des Labels, durchlaufen. Frage: Wie kann ich es unterbinden, dass beim Label der Eventhandler durchlaufen wird? Das ist doch auch ein Bug, oder hat das einen Hintergrund?

Gruß Joerg

29.11.2023 - 20:23 Uhr

Zitat von david.m

Es muss die Handled-Eigenschaft auf true gesetzt werden.

Dankeschön, jetzt funktioniert es.

29.11.2023 - 19:19 Uhr

Hi zusammen,

ich bräuchte nochmal Hilfe beim Sortieren eines ungebundenen Datagridviews. Ich habe ein DGV 'dgvZeit' in dem sich die Spalte 'tag' befindet. Diese ist mit Wochentagen (Montag, Dienstag...) gefüllt. Ein Klick auf den Header sortiert die Tage alphabetisch. Gewünscht ist aber die 'normale' Wochentagreihenfolge. Deshalb wollte ich das SortCompare Ereignis nutzen, um die entsprechende Sortierreihenfolge herzustellen. Das Ergebnis von e.SortResult interessiert mein DGV aber nicht. Es sortiert trotzdem alphabetisch. Was mache ich falsch?

        private void dgvZeit_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
        {
            string[] tage = { "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag" };
            if (e.Column.Name == "tag") 
            {
                if (Array.IndexOf(tage, e.CellValue1.ToString()) > Array.IndexOf(tage, e.CellValue2.ToString())) e.SortResult = 1;
                else if (Array.IndexOf(tage, e.CellValue1.ToString()) < Array.IndexOf(tage, e.CellValue2.ToString())) e.SortResult = -1;
                else e.SortResult = 0;
                //msgbox($"{e.CellValue1.ToString()}, {e.CellValue2.ToString()} result: {e.SortResult}");
            }
        }
27.11.2023 - 15:21 Uhr

Zitat von Th69

Du mußt wohl nach jeder Verbindung zuerst PRAGMA foreign_keys = ON; absenden, s.a. SQLite Cascade Delete.

He, du kommst in mein Nachtgebet. Danke dir. Joerg

27.11.2023 - 14:17 Uhr

Hi zusammen,

ich habe in meiner SQLite-Datenbank eine untergeordnete Tabelle 'resKat' die in einer Fremdschlüsselspalte auf die übergeordnete Tabelle 'kategorie' verweist. Die Fremdschlüsselspalte ist auf OnDeleteCascade eingestellt. Lösche ich innerhalb SQLite-Studio eine Zeile aus Tabelle 'kategorie' werden die korrespondierenden Datensätze in 'resKat' automatisch gelöscht.

Die identische SQL-Anweisung aus C# heraus löscht zwar den Datensatz in Tabelle 'kategorie' nicht aber die korrespondierenden Datensätze in 'resKat'. Was mache ich falsch?

         //---------------------------------------------------------------------------------
        //brief: führt DML-Kommandos aus (Insert, Update, Delete)
        private int dml (SQLiteCommand cmd)
        {
            int result = 0;

            try
            {
                dbCon.Open(); //global verfügbar
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                MessageBox.Show("Ausnahmefehler in 'Form1.dml'\n\nFehler: " + e.Message, "Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
            dbCon.Close();
            return result;
        }

        ....
        cmd.CommandText = $"delete from kategorie where katId={dgvKat.CurrentRow.Cells["katId"].Value}"; //katId aus Datagrid dgvkat
        int deletedRows = dml(cmd);
        ....

SQLiteStudio 3.4.4

Visual Studio Community 2019

.net 4.7.3 mit c# V7.3

System.Data.SQLite 1.0.118

25.11.2023 - 13:09 Uhr

Zitat von Th69

Dies kannst du mit dem CellValidating-Ereignis durchführen und dessen Eigenschaft Cancel setzen.

Ah ja, super. Das habe ich gesucht. Danke

24.11.2023 - 20:36 Uhr

Hi Professionals,

ich möchte verhindern, dass in einem DataGridView Werte eingegeben werden, die im Sinne der Anwendung nicht korrekt sind. Zum Beispiel Text in einer Postleitzahl-Spalte.

Die Überprüfung eines neuen Zellwertes führe ich im CellEndEdit-Ereignis durch und ersetze dort auch einen 'fehlerhaften' Wert durch den voherigen.

Meine Frage ist: wie kann ich den Cursor wieder auf diese 'fehlerhafte' Zelle setzen. Beispielsweise springt der Cursor nach {ENTER} um eine Zeile nach unten. Innerhalb des CellEndEdit-Ereignisses ist ein Neusetzen von CurrentCell wirkungslos. Das Gleiche gilt, wenn die Eingabe durch einen Mausklick auf eine andere Zeile abgeschlossen wird.

Gruß Joerg

20.11.2023 - 13:55 Uhr

Hi TH69,

Edit: Evtl. wäre eine ListView mit View = View.Details und CheckBoxes = true einfacher zu benutzen?

Das hatte ich auch schon überlegt. Allerdings scheint (mir) das ListView relativ komplex und ich wollte mir die Einarbeitung für später aufheben 😃 .

Kann man denn dort die Zeilenabstände einstellen?

20.11.2023 - 13:05 Uhr

Na ja, der Abstand der Texte ist ja auch entsprechend der Checkboxen. Der müsste nur noch vertikal zentriert zu den Kästchen stehen...

Bekommst du das auch noch hin?

20.11.2023 - 10:53 Uhr

Hi zusammen,

ich möchte den Zeilenabstand einer checkedListbox (unabhängig von der Schriftart) einstellen. Ich nutze Visual Studio Community 2019 mit .net-Framework 4.7.3 und dementsprechend C# 7.3.

Weiß jemand, wie es geht? (und verrät es mir auch hier 😉 )

Gruß Joerg