Problem mit UserControl

28/08/2008 - 10:25 von Thomas Griepentrog | Report spam
Hallo NG,

ich habe in meiner Anwendung ein Panel, in das ich verschiedene UserControls
lade.

Nun habe ich ein Control, welches ein paar Einstellungen speichern soll.

Wie kann ich das UserControl wieder vom Panel entfernen, nachdem ich den
Speichern-Button im Control gedrückt habe?

Aktueller Code zum anzeigen des Controls:

SettingsMailForm MailForm = new SettingsMailForm();
panel2.Controls[ 0 ].Visible = false; // Hauptansicht verstecken
panel2.Controls.Add( MailForm ); // Einstellungs-Control anzeigen

Wie kann die Hauptanwendung mitbekommen, dass ich im MailForm die
Einstellungen gespeichert habe bzw. Abbreche?

Thomas
 

Lesen sie die antworten

#1 Elmar Boye
28/08/2008 - 18:30 | Warnen spam
Hallo Thomas,

Thomas Griepentrog schrieb:
ich habe in meiner Anwendung ein Panel, in das ich verschiedene
UserControls lade.

Nun habe ich ein Control, welches ein paar Einstellungen speichern soll.

Wie kann ich das UserControl wieder vom Panel entfernen, nachdem ich den
Speichern-Button im Control gedrückt habe?

Aktueller Code zum anzeigen des Controls:

SettingsMailForm MailForm = new SettingsMailForm();
panel2.Controls[ 0 ].Visible = false; // Hauptansicht verstecken
panel2.Controls.Add( MailForm ); // Einstellungs-Control anzeigen

Wie kann die Hauptanwendung mitbekommen, dass ich im MailForm die
Einstellungen gespeichert habe bzw. Abbreche?



Verpasse dem Steuerelement ein Ereignis, mit dem es die Änderung
mitteilt, damit kann auch das Entfernen von der Oberflàche geschehen.

Unten ein vereinfachtes Beispiel, das dazu ein CancelEvent nutzt
(ein eigenes mag dafür besser sein).

Gruß Elmar


// Code für das UserControl:
public partial class MailSettingsControl : UserControl
{
public EventHandler<CancelEventArgs> SettingsChanged;

public MailSettingsControl()
{
InitializeComponent();
}

private void saveButton_Click(object sender, EventArgs e)
{
OnSettingsChanged(new CancelEventArgs());

}

private void cancelButton_Click(object sender, EventArgs e)
{
OnSettingsChanged(new CancelEventArgs(true));
}

protected void OnSettingsChanged(CancelEventArgs e)
{
if (this.SettingsChanged != null)
this.SettingsChanged(this, e);
}
}


// Code für das Formular
private Control lastActiveControl;

public MailForm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
MailSettingsControl settingsControl = new MailSettingsControl();
settingsControl.SettingsChanged += MailSettingsChanged;
this.lastActiveControl = this.panel2.Controls[0];
this.lastActiveControl.Visible = false;
this.panel2.Controls.Add(settingsControl);
}

private void MailSettingsChanged(object sender, CancelEventArgs e)
{
MailSettingsControl control = (MailSettingsControl)sender;
control.SettingsChanged -= MailSettingsChanged;

if (!e.Cancel)
{
// Speichern, Benachrichten der Anwendung usw...
}

this.lastActiveControl.Visible = true;
this.lastActiveControl.Focus();
this.Controls.Remove((Control)sender);

control.Dispose();
}

Ähnliche fragen