hallo,
ich habe eine klasse dir von form abgeleitet ist, mit einem label.
jetzt möchte ich eine eigenschaft meiner klasse zur laufzeit ändern,
das geht!
aber jetzt möchte ich die text-eigenschaft meines labels ändern,
habe aber nur das this-objekt zu verfügung?
kann mir da jemand helfen?
Nochmal zum Mitschneiden für mich...
Du hast eine FormIrgendwas : Form. Darauf klebt ein Label...
class myForm : Form
{
private Label myLabel;
// <-- diese Stelle bitte merken!
public void myForm()
{
this.InitializeComponent();
}
private void InitializeComponent()
{
// sonstigen krams a la Form Designer weggelassen
this.myLabel = new Label();
this.myLabel.Location = new Point(10, 10);
this.myLabel.Size = new Size(50, 20);
this.myLabel.Text = "mein Text";
this.Controls.Add(this.myLabel);
}
}
Und jetzt willst Du die Text-Eigenschaft Deines Labels von "außen" ändern? Dann füge einfach an die Stelle, die Du Dir da oben merken solltest, dieses ein...
public string myLabelText
{
get { return this.myLabel.Text; }
set { this.myLabel.Text = value; }
}
... und schon kannst Du per
myForm frm = new myForm();
frm.myLabelText = "mein neuer Text";
den Text ändern.
... oder hab ich jetzt was falsch verstanden?
/// <summary>
/// Signatur
/// </summary>
ich will aus einer Xml-Datei Eigenschaften Laden und zwar über eine Klasse die das automatisch prüft.
xml-datei
<Namespace Name="TestApp">
<Class Name="Form1">
<Property Name="Text" Value="TestPropForm" />
<Variable Name="label1">
<Property Name="Text" Value="TestLable" />
</Variable>
<Variable Name="test" Value="testString" /> // hier wird der else zweig eingelesen, z.B. string
</Class>
</Namespace>
private void LoadVariable(XmlNode _node)
{
FieldInfo fieldInfo = null;
PropertyInfo propInfo = null;
Type tempType = _this.GetType();
string _name;
if(_node.Name == "Variable")
if(_node.HasChildNodes)
{
fieldInfo = tempType.GetField( _node.Attributes["Name"].Value ,BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach(XmlNode node in _node.ChildNodes)
if(node.Name == "Property")
{
propInfo = fieldInfo.FieldType.GetProperty(node.Attributes["Name"].Value);
if(propInfo != null)
{
propInfo.SetValue(_this,node.Attributes["Value"].Value,null);
}
}
}
else
{
//_name = _node.Attributes["Name"].Value;
fieldInfo = tempType.GetField( _node.Attributes["Name"].Value,BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if(fieldInfo != null)
fieldInfo.SetValue(_this,_node.Attributes["Value"].Value);
}
du versuchst die Text eigenschaft einer page klasse zu aendern
(this ist in deinem code ausschnitt eine ableitung von page).
entweder du fuegst deiner abgeleiteten page klasse so eine
eigenschaft hinzu, oder du laeufst ueber die page controls und suchst
dein label. dazu koenntest du z.b. in die xml datei ja noch eine control
id aufnehmen.
for ( int i=0; i<this.controls.length; ++i)
if ( controls[i].name == nameAusXmlDatei )
setzeControlTextEigenschaft(control[i],textEigenschaftAusXmlDatei);
// auch eine moeglichkeit
setzeControlTextEigenschaft(control c,string text)
{
try {
c.GetType().InvokeMember("Text",System.Reflection.BindingFlags.SetProperty,
null,c,new object[]{text});
catch {
}
}