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
@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.
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?
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
Zitat von david.m
Es muss die Handled-Eigenschaft auf true gesetzt werden.
Dankeschön, jetzt funktioniert es.
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}");
}
}
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
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
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
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
Hi TH69,
Edit: Evtl. wäre eine ListView mit
View = View.Details
undCheckBoxes = 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?
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?
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