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-ID: 665692

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

148121
Lösung 148121 13.04.2021 aktualisiert um 14:05:13 Uhr
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.
emeriks
Lösung emeriks 13.04.2021 um 14:33:15 Uhr
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.
Florian86
Florian86 13.04.2021 um 14:35:05 Uhr
Goto Top
danke
Florian86
Florian86 14.04.2021, aktualisiert am 21.04.2022 um 16:36:07 Uhr
Goto Top
Wenn Ich das ganze mit sender mache bekomme ich einen Syntaxfehler....

screenshot_1
148121
Lösung 148121 14.04.2021 aktualisiert um 11:58:21 Uhr
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)