none
GroupBox Enter_Event RRS feed

  • Frage

  • Hallo NG,

    Wie kann ich den Enter Event bei einer GroupBox abfangen ohne zuerst auf ein Control welches sich auf dieser GroupBox befindet zu klicken?

    Wie bekomme ich es hin, dass wenn ich nur auf die GroupBox klicke, der Enter Event ausgelöst wird?

    Danke

    Robert Oberholzer

     

    Freitag, 26. August 2011 12:05

Antworten

  • Hallo Robert,

    • Wie bekomme ich es hin, dass wenn ich nur auf die GroupBox klicke, der Enter Event ausgelöst wird?

    na, Du könntest den Click-Event der GroupBox nutzen. Oder im Click-Ereignis dann SelectNextControl aufrufen, wodurch dann ja ein Enter stattfindet.
    Es käme darauf an, was für ein Verhalten intendiert ist. Beispielsweise also:

     

    using System;
    using System.Reflection;
    using System.Windows.Forms;
    
    namespace WinGroupBoxEnterDemo
    {
     public partial class Form1 : Form
     {
      GroupBox groupBox1 = new GroupBox { Margin = new Padding(20) };
      Button btn = new Button { Text = "btn" };
      TextBox txt1 = new TextBox { Text = "txt1" };
      TextBox txt2 = new TextBox { Text = "txt2" };
      TextBox txtEreignisInfo = new TextBox { Text = "txtEreignisInfo" };
      int zähler = 0;
    
      public Form1()
      {
       InitializeComponent();
       Controls.Add(txt1); groupBox1.Top = txt1.Height + 10;
       btn.Top = 20; groupBox1.Controls.Add(btn);
       txt2.Top = btn.Top + btn.Height; groupBox1.Height = 200;
       txtEreignisInfo.Top = txt2.Top + txt2.Height;
       txtEreignisInfo.Height = groupBox1.Height - txtEreignisInfo.Top - 5; 
       txtEreignisInfo.ScrollBars = ScrollBars.Both;
       txtEreignisInfo.Multiline = true; txtEreignisInfo.Width = groupBox1.Width;
       groupBox1.Controls.Add(txt2); groupBox1.Controls.Add(txtEreignisInfo);
       groupBox1.Enter += GroupBox1_Enter; groupBox1.Click += GroupBox1_Click;
       Controls.Add(groupBox1);
      }
    
      void GroupBox1_Click(object sender, EventArgs e)
      {
       SelectNextControl(groupBox1, true, true, true, true);
      }
    
      void GroupBox1_Enter(object sender, EventArgs e)
      {
       txtEreignisInfo.AppendText("\r\n" + zähler++ + ": Enter");
      }
     }
    }
    

    In diesem Beispiel führt ein Click in die GroupBox natürlich nur dann zu einem Enter, wenn sich der Fokus vorher außerhalb befand - außerdem wird das erste Control (mit TabStop) selektiert. Wie gesagt es würde ansonsten von Deinen Anforderungen diesbzgl. abhängen, finde es aber prinzipiell so erstmal am sinnvollsten.  
    ciao Frank
    Freitag, 26. August 2011 22:15

Alle Antworten

  • Hallo Robert,

    • Wie bekomme ich es hin, dass wenn ich nur auf die GroupBox klicke, der Enter Event ausgelöst wird?

    na, Du könntest den Click-Event der GroupBox nutzen. Oder im Click-Ereignis dann SelectNextControl aufrufen, wodurch dann ja ein Enter stattfindet.
    Es käme darauf an, was für ein Verhalten intendiert ist. Beispielsweise also:

     

    using System;
    using System.Reflection;
    using System.Windows.Forms;
    
    namespace WinGroupBoxEnterDemo
    {
     public partial class Form1 : Form
     {
      GroupBox groupBox1 = new GroupBox { Margin = new Padding(20) };
      Button btn = new Button { Text = "btn" };
      TextBox txt1 = new TextBox { Text = "txt1" };
      TextBox txt2 = new TextBox { Text = "txt2" };
      TextBox txtEreignisInfo = new TextBox { Text = "txtEreignisInfo" };
      int zähler = 0;
    
      public Form1()
      {
       InitializeComponent();
       Controls.Add(txt1); groupBox1.Top = txt1.Height + 10;
       btn.Top = 20; groupBox1.Controls.Add(btn);
       txt2.Top = btn.Top + btn.Height; groupBox1.Height = 200;
       txtEreignisInfo.Top = txt2.Top + txt2.Height;
       txtEreignisInfo.Height = groupBox1.Height - txtEreignisInfo.Top - 5; 
       txtEreignisInfo.ScrollBars = ScrollBars.Both;
       txtEreignisInfo.Multiline = true; txtEreignisInfo.Width = groupBox1.Width;
       groupBox1.Controls.Add(txt2); groupBox1.Controls.Add(txtEreignisInfo);
       groupBox1.Enter += GroupBox1_Enter; groupBox1.Click += GroupBox1_Click;
       Controls.Add(groupBox1);
      }
    
      void GroupBox1_Click(object sender, EventArgs e)
      {
       SelectNextControl(groupBox1, true, true, true, true);
      }
    
      void GroupBox1_Enter(object sender, EventArgs e)
      {
       txtEreignisInfo.AppendText("\r\n" + zähler++ + ": Enter");
      }
     }
    }
    

    In diesem Beispiel führt ein Click in die GroupBox natürlich nur dann zu einem Enter, wenn sich der Fokus vorher außerhalb befand - außerdem wird das erste Control (mit TabStop) selektiert. Wie gesagt es würde ansonsten von Deinen Anforderungen diesbzgl. abhängen, finde es aber prinzipiell so erstmal am sinnvollsten.  
    ciao Frank
    Freitag, 26. August 2011 22:15
  • Hallo Robert,

    WPF oder Forms?


    "It's time to kick ass and chew bubble gum... and I'm all outta gum." - Duke Nukem
    Freitag, 26. August 2011 22:30
  • Hallo Frank,

    Habe in meiner Anwendung (Forms) eigene Panels definiert. Mit Titelleiste usw.

    Wenn ein User nun auf irgend ein Control innerhalb dieses Panels klickt,

    also auch auf eine GroupBox, wird die Titelleiste des Panels anders Farbig angezeigt,

    Kann ich mit Deinem Vorschlag Click-Ereignis lösen.

    Hätte ich aber auch selber darauf kommen können!?

     

    Vielen Dank für Deine Antort

    Grüsse Robert

    Samstag, 27. August 2011 09:23