Laden...

ToggleButton Checked/Unchecked Event NICHT ausführen

Erstellt von xKushGene vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.763 Views
X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren
ToggleButton Checked/Unchecked Event NICHT ausführen

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)
            {

            }
        }
241 Beiträge seit 2010
vor 7 Jahren

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

O
15 Beiträge seit 2015
vor 7 Jahren

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

771 Beiträge seit 2009
vor 7 Jahren

Probiere mal


if(result == MessageBoxResult.No)
{
    e.Handled = true;
}

Edit: Ja, sollte wohl in ein Preview-Event rein.

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo xKushGene,

trenne bitte deinen Datenbank-Code vom UI-Code!

[Artikel] Drei-Schichten-Architektur

Gruss

Coffeebean

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

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.

2.207 Beiträge seit 2011
vor 7 Jahren

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?"

D
985 Beiträge seit 2014
vor 7 Jahren

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).