Ich habe eine Ja/Nein Abfrage gemacht, sobald man auf den ToggleButton klickt.
Ich möchte, dass wenn man auf Nein drückt, sich der Toggle Button NICHT ändern. Also er soll nicht von Checked auf Unchecked oder ansersherum wechseln.
Wenn JA geklickt wird, soll es allerdings passieren.
Gibt es eine Funktion, die dieses Event nicht aufruft?
Wenn ich auf Nein Drücke, ändert sich der ToggleButton trotzdem.
Meine Checked / Unchecked Events:
private void customerTypeButton_Checked(object sender, RoutedEventArgs e)
{
if (customerIDBox.Text != null)
{
customerIDBox.Text = null;
}
// PrivateCustomer For Search
PrivateCustomerChecked = true;
FirmCustomerChecked = false;
columns_sql = "SELECT * FROM " + privateCustomerTablename;
if (comboboxSearch != null)
{
comboboxSearch.Items.Clear();
}
LoadColumnsComboBox();
}
private void customerTypeButton_Unchecked(object sender, RoutedEventArgs e)
{
if (customerIDBox.Text != null)
{
customerIDBox.Text = null;
}
// FirmCustomer for search
PrivateCustomerChecked = false;
FirmCustomerChecked = true;
columns_sql = "SELECT * FROM " + firmCustomerTablename;
if (comboboxSearch != null)
{
comboboxSearch.Items.Clear();
}
LoadColumnsComboBox();
}
Und die Abfrage, die bisher noch leer ist (Hatte die Abfrage vorher an erster Stelle der beiden Events gepackt):
private void customerTypeButton_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Wenn Sie den Kunden-Typ verändern, wird die KundenID aus der Textbox entfernt. In der Kunden Suche werden Ihnen nur die Filter für den ausgewählten Kunden-Typ angezeigt. Wollen Sie den KundenTyp wirklich Ändern?", "Achtung!", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if(result == MessageBoxResult.Yes)
{
}
if(result == MessageBoxResult.No)
{
}
}
Du kannst in deinen Event-Handler den Status überprüfen und mit "e.Cancel = true" den Vorgang abbrechen. Je nachdem, wo dein ToogleButton her kommt, sollte es dort ein Art Changing-Event geben.
WAGO Kontakttechnik GmbH & Co. KG / Software Notion
Softwareentwicklung
C# .NET with WPF, ASP, Xamarin and Unity
Personal Blog: Development Blog
Guten Morgen,
Ich würde da etwas anders herangehen und das PreviewMouseDown Event abfangen.
Dort kannst du deine Abfrage tätigen und, wenn der "Click" abgebrochen werden soll einfach e.Handled = true; setzen.
Dann wird der Klick auf den Toggle Button nicht ausgeführt.
Lg
Probiere mal
if(result == MessageBoxResult.No)
{
e.Handled = true;
}
Edit: Ja, sollte wohl in ein Preview-Event rein.
Hallo xKushGene,
trenne bitte deinen Datenbank-Code vom UI-Code!
[Artikel] Drei-Schichten-Architektur
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Probiere mal
if(result == MessageBoxResult.No) { e.Handled = true; }
Funktioniert soweit.
Allerdings passiert nichts, wenn ich auf JA drücke. Habe es mal einfach zum testen mit
e.Handled = false
versucht aber auch kein Erfolg gehabt.
Wenn man ja drückt soll sich der ToggleButton ändern.
Gibt es da auch irgendeine e.Methode ?
trenne bitte deinen Datenbank-Code vom UI-Code!
Ist für mich gerade kompliziert, weshalb ich auch beim Code-Behind bleibe und es so mache, dass es funktioniert. Auch wenn es gammlig ist 😄 Aber ich werde es sicherlich noch lernen. Mit MVVM und 3 Schichten Architektur komme ich durcheinander.
Ist für mich gerade kompliziert, weshalb ich auch beim Code-Behind bleibe und es so mache, dass es funktioniert. Auch wenn es gammlig ist 😄 Aber ich werde es sicherlich noch lernen. Mit MVVM und 3 Schichten Architektur komme ich durcheinander.
"If you don't have time to do it right, when will you have time to do it over?"
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Vorweg: MVVM und die generelle Schichtentrennung ist auf jeden Fall zu bevorzugen (und prinzipiell auch gar nicht so schwierig - man muss nur einmal den Kopf um die Ecke kriegen).
Als Lösung kannst du ja mal folgendes versuchen:
private bool checkchanged_active;
private async void CheckBox_CheckChanged( object sender, RoutedEventArgs e )
{
if (checkchanged_active)
{
return;
}
CheckBox cb = sender as CheckBox;
checkchanged_active = true;
try
{
var new_state = cb.IsChecked;
var user_query_result = await Dispatcher.InvokeAsync( () => MessageBox.Show( "Wirklich ändern?", "Achtung!", MessageBoxButton.YesNo, MessageBoxImage.Warning ) );
if (user_query_result != MessageBoxResult.Yes)
{
cb.IsChecked = !new_state;
return;
}
}
finally
{
checkchanged_active = false;
}
if (cb.IsChecked ?? false)
{
customerIdBox.Text = "Ist gecheckt";
}
else
{
customerIdBox.Text = "Nicht gecheckt";
}
}
Bei der CheckBox habe ich für den Checked
und Unchecked
Event diese Methode CheckBox_CheckChanged
angegeben (weil ich ja immer schreibfaul bin).