Ich habe eine Benutzersteuerung erstellt und ich brauche, dass, wenn die Eigenschaft Controls lesen wird ein Control von mir und nicht die Basiseigenschaft Control.ControlsWie kann ich eine Eigenschaft nur von der geerbten Klasse zugänglich machen?
Ich tat dies angegeben zurück und es funktioniert, wenn ich CustomGroupBox.Controls lesen, aber Wenn eine Methode, die ein Steuerelement als Parameter erhält (es erhält einen beliebigen Steuerelementtyp wie CustomGroupBox, Button, Panel usw.) versucht, Control.Controls zu lesen, erhält es die Basis-ControlCollection.
Lassen Sie mich mein Problem mit dem Code erklären
CustomGroupBox.cs
public partial class CustomGroupBox : UserControl
{
Panel Panel1 = null;
Panel Panel2 = null;
bool UseBaseControls = true;
public CustomGroupBox()
{
InitializeComponent();
Panel1 = new Panel() { Name = "Panel1" };
Panel2 = new Panel() { Name = "Panel2" };
Controls.Add(Panel1);
Controls.Add(Panel2);
UseBaseControls = false;
}
public new ControlCollection Controls { get { return UseBaseControls ? base.Controls : Panel1.Controls; } }
}
Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
CustomGroupBox Container = new CustomGroupBox();
Container.Controls.Add(new Button());
Container.Controls.Add(new Button());
Container.Controls.Add(new Button());
Container.Controls.Add(new Button());
Control Parameter = Container;
int i = Container.Controls.Count; // i=4
int j = Parameter.Controls.Count; // j=2
}
}
Hat jemand weiß, was muss ich auf CustomGroupBox.cs so j ändern = 4?
Update:
ich eine Lösung nicht finden kann, habe ich versucht, eine interfaz wie IContainerControl zu implementieren, aber es does 't Arbeit.
Gewöhnen Sie sich an, Ihre Einheimischen mit kleinen Buchstaben zu benennen. Das ist der Standard in C#. Benennen Sie Eigenschaften und Felder sowie Methoden und Typen, die mit großen Buchstaben beginnen. –
So funktioniert 'neu': Was genau ist Ihr Ziel? Vielleicht gibt es einen anderen Weg. – Blorgbeard
Das ist wahr Eric – joe