florian86
Goto Top

Textbox Enter Leave mit ActiveControl

Hallo,

kann man das auch kürzer machen...

        private void textBox1_Enter(object sender, EventArgs e)
        {
            textBox1.BackColor = Color.OrangeRed;

        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            textBox1.BackColor = Color.White;

        }

        private void textBox2_Enter(object sender, EventArgs e)
        {
            textBox2.BackColor = Color.OrangeRed;
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {
            textBox2.BackColor = Color.White;
        }

        private void textBox3_Enter(object sender, EventArgs e)
        {
            textBox3.BackColor = Color.OrangeRed;
        }

        private void textBox3_Leave(object sender, EventArgs e)
        {
            textBox3.BackColor = Color.White;
        }

Wenn ich ActiveControl.Backcolor mache bleiben in der Leave Methode also beim Verlassen des Steuerelementes, diese
Orange und werden nicht weiss
        private void textBoxAll_Enter(object sender, EventArgs e)
        {
            ActiveControl.BackColor = Color.OrangeRed;
        }

        private void textBoxAll_Leave(object sender, EventArgs e)
        {
            ActiveControl.BackColor = Color.White;
        }


Grüße Florian

Content-Key: 665692

Url: https://administrator.de/contentid/665692

Printed on: July 24, 2024 at 15:07 o'clock

Mitglied: 148121
Solution 148121 Apr 13, 2021 updated at 12:05:13 (UTC)
Goto Top
kann man das auch kürzer machen...
Jepp.
Du kannst dir bspw. eine abgeleitete Klasse für deine Textbox erstellen und dort überschreibst du die Event-Handler.
Die Textboxen erstellst du dann on the fly von der Klasse, diese erben dann die Eigenschaften und Eventhandler die du in der Custom Textbox Klasse definierst und schon haben diese Controls dein gewünschtes vordefinierte Verhalten .

Einfaches Beispiel
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            MyCustomTextBox t1 = new MyCustomTextBox() { Location = new Point(10,10), Size = new Size(150,20)};
            MyCustomTextBox t2 = new MyCustomTextBox() { Location = new Point(10,40), Size = new Size(150,20)};
            Controls.AddRange(new MyCustomTextBox {t1,t2});
        }
    }

    public class MyCustomTextBox : TextBox {
        protected override void OnEnter(EventArgs e) {
            base.OnEnter(e);
            this.BackColor = Color.OrangeRed;
        }
        protected override void OnLeave(EventArgs e) {
            base.OnLeave(e);
            this.BackColor = Color.White;
        }
    }
}

Alternativ kannst du auch per Foreach Schleife über die bestehende Controls itterieren und dann zwei feste Eventhandler allen gewünschten Textbox Controls zuordnen.

Gruß w.
Member: emeriks
Solution emeriks Apr 13, 2021 at 12:33:15 (UTC)
Goto Top
Hi,
Zitat von @Florian86:
Wenn ich ActiveControl.Backcolor mache bleiben in der Leave Methode also beim Verlassen des Steuerelementes, diese
Orange und werden nicht weiss
Manchmal sieht man den Wald vor lauter Bäumen nicht ... face-wink

Statt "ActiveControl" nehme "Sender".

 
         private void textBoxAll_Enter(object sender, EventArgs e)
         {
             Sender.BackColor = Color.OrangeRed;
         }
 
         private void textBoxAll_Leave(object sender, EventArgs e)
         {
             Sender.BackColor = Color.White;
         }
 
 


E.
Member: Florian86
Florian86 Apr 13, 2021 at 12:35:05 (UTC)
Goto Top
danke
Member: Florian86
Florian86 Apr 14, 2021, updated at Apr 21, 2022 at 14:36:07 (UTC)
Goto Top
Wenn Ich das ganze mit sender mache bekomme ich einen Syntaxfehler....

screenshot_1
Mitglied: 148121
Solution 148121 Apr 14, 2021 updated at 09:58:21 (UTC)
Goto Top
Du musst das sender-Object nur als TextBox-Type "Casten" dann meckert die IDE auch nicht mehr face-wink
((TextBox)sender).BackColor = ........
oder auch
(sender as TextBox).BackColor = ......

Umwandlung und Typkonvertierungen (C#-Programmierhandbuch)