none
UserControl-ENTER -AcceptButton RRS feed

Antworten

  • Hallo Andreas,

    Die AcceptButton-Property gibt es nur für die System.Windows.Form-Klasse. Da Du aber in Deinem Benutzersteuerelement sowieso das dort implementierte Verhalten nicht brauchst (Du willst ja keine DialogResult-Werte verarbeiten), könntest Du mit Button.NotifyDefault() zunächst den visuellen Status der Schaltfläche ändern. Dann überschreibst Du ProcessDialogKey und erreichst damit eine ähnliche dialogweite Verarbeitung von Tastaturbefehlen wie das in Windows.Forms geschieht:

    using System;
    using System.Windows.Forms;
    using System.Reflection;
    
    namespace WindowsFormsApplication1
    {
      public partial class MyUserControl : UserControl
      {
        public MyUserControl()
        {
          InitializeComponent();
          buttonOK.NotifyDefault(true);
        }
    
        private void buttonOK_Click(object sender, EventArgs e)
        {
          MessageBox.Show(txtInputHandheldscanner.Text);
        }
    
        protected override bool ProcessDialogKey(Keys keyData)
        {
          if (keyData == Keys.Enter)
          {
            buttonOK.PerformClick();
            return true;
          }
    
          return base.ProcessDialogKey(keyData);
        }
      }
    }
    
    

     

    Button.NotifyDefault-Methode:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.button.notifydefault.aspx

    IButtonControl.PerformClick-Methode:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.ibuttoncontrol.performclick(v=VS.100).aspx 

     

    Gruß
    Marcel

    Dienstag, 29. März 2011 15:34
    Moderator

Alle Antworten

  • Hallo Andreas,

    Die AcceptButton-Property gibt es nur für die System.Windows.Form-Klasse. Da Du aber in Deinem Benutzersteuerelement sowieso das dort implementierte Verhalten nicht brauchst (Du willst ja keine DialogResult-Werte verarbeiten), könntest Du mit Button.NotifyDefault() zunächst den visuellen Status der Schaltfläche ändern. Dann überschreibst Du ProcessDialogKey und erreichst damit eine ähnliche dialogweite Verarbeitung von Tastaturbefehlen wie das in Windows.Forms geschieht:

    using System;
    using System.Windows.Forms;
    using System.Reflection;
    
    namespace WindowsFormsApplication1
    {
      public partial class MyUserControl : UserControl
      {
        public MyUserControl()
        {
          InitializeComponent();
          buttonOK.NotifyDefault(true);
        }
    
        private void buttonOK_Click(object sender, EventArgs e)
        {
          MessageBox.Show(txtInputHandheldscanner.Text);
        }
    
        protected override bool ProcessDialogKey(Keys keyData)
        {
          if (keyData == Keys.Enter)
          {
            buttonOK.PerformClick();
            return true;
          }
    
          return base.ProcessDialogKey(keyData);
        }
      }
    }
    
    

     

    Button.NotifyDefault-Methode:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.button.notifydefault.aspx

    IButtonControl.PerformClick-Methode:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.ibuttoncontrol.performclick(v=VS.100).aspx 

     

    Gruß
    Marcel

    Dienstag, 29. März 2011 15:34
    Moderator
  • Hallo Marcel,

    Danke. Man will halt einscannen, Enter drücken, nicht lang selektieren.

    Diesen Weg kannte ich nicht.

     

    Grüße Andreas

    Dienstag, 29. März 2011 16:53