webForumDet fria alternativet

C# WinForm: Userkontroll problem

3 svar · 330 visningar · startad av aleborg

aleborgMedlem sedan jan. 20012 962 inlägg
#1

Jag har en WinForm där jag placerat en tabcontrol.
På en av tabsidorna har jag placerat en userkontroll som har följande kod vid dubbelklick i en datagrid:

	Form1 f = new Form1();
	f.LoadUser(Convert.ToInt32(row.Cells[0].Value.ToString()));

i Form1 som huvudformuläret heter finns följande kod:

	public void LoadUser(int userid)
	{
		UltraTab kinfo =(UltraTab)tabMain.Tabs.GetItem(0);
		tabMain.SelectedTab = kinfo;
		kinfo.Enabled=true;
		MessageBox.Show(userid.ToString());
		customerInfo1.LoadContactInfo(userid,2);
	}

Här ska det växlas tabsida och viss kod ska köras mot den userkontroll som finns på den tabsidan.
Messageboxen visas men tabben byts aldrig och customerInfo1.LoadContactInfo(userid,2); får ingen effekt.

Om jag testar med följande i Form1_Load:

	private void Form1_Load(object sender, System.EventArgs e)
	{
		LoadUser(30000);
	}

Så körs allt som det ska!
Vad gör man? Det funkar från Form1 men inte från userkontrollen!

aleborgMedlem sedan jan. 20012 962 inlägg
#2

Efter lite sökning här på wF så löstes alla mina problem :D
http://www.webforum.nu/showthread.php?s=&forumid=29&threadid=78585&highlight=usercontrol
bytte

	Form1 f = new Form1();
	f.LoadUser(Convert.ToInt32(row.Cells[0].Value.ToString()));

mot

((Form1)this.ParentForm).LoadUser(Convert.ToInt32(row.Cells[0].Value.ToString()));
aleborgMedlem sedan jan. 20012 962 inlägg
#3

Mer problem :(
om jag kör följande kod från en en annan form (dialog)

((Form1)this.ParentForm).LoadUser(30000);

så får jag felmeddelande om att "Objektreferensen har inte angetts till en instans av ett objekt."
Det funkar i Form1 men inte från en annan form i samma projekt.
Någon som har koll på detta?

aleborgMedlem sedan jan. 20012 962 inlägg
#4

Lösningen för dom som är intresserade:

om man öppnar en dialog så här:

	MinDialog f = new MinDialog();
	f.ShowDialog(this.ParentForm);

så kan man inte använda
this.ParentForm
utan man måste använda
this.Owner för att kalla på en publik funktion i den "formen" som öppnade dialogen.

Genererad på 361 ms · cache AV · v20260730165559-full.f96bc7eb