Diskuze: Jak otevřít formulář, podle jména v proměnné, do karty tabPage?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nefungovalo by to spíš takto:
= Form.FromHandle(Activator.CreateInstance(....));
(nezkoušel jsem to, nikdy jsem to nepotřeboval, takže jen střílím od boku)
Moc děkuji. Bohužel až do příští soboty nebudu u pc, ale potom to hned vyzkouším a odepíšu.
Původní příspěvek ignoruj, dnes jsem měl čas si to zkusit:
using System;
using System.Reflection;
using System.Windows.Forms;
// Projekt: Aplikace Windows Forms .NET Framework 4.7.2
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
textBoxClassName.Text = "Form2";
}
private void button1_Click(object sender, EventArgs e)
{
Form f = CreateFormFromClassName(textBoxClassName.Text);
//f.BringToFront();
f.Dock = DockStyle.Fill;
f.TopLevel = false;
f.Visible = true;
f.FormBorderStyle = FormBorderStyle.None;
TabPage p = new TabPage(textBoxClassName.Text);
p.Controls.Add(f);
tabControl1.TabPages.Add(p);
}
private Form CreateFormFromClassName(string className)
{
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
Type type = assembly.GetType(assemblyName + "." + className);
return (Form)Activator.CreateInstance(type);
}
}
}
Je to bez ošetření chyb a je to trošku roztahané, abych to krokoval, ale funguje to. Takže už si to jen dolaď.
Moc děkuji za tvůj čas. Hned v sobotu se na to podívám.
Matěj Zelenka
Ještě jednou ahoj,
mám ještě problém, že ono to ten formulář hledá v hlavním projektu a on
je ve stejném sestavení, ale ve vedlejším projektu s jiným názvem. Takže
bych potřeboval, aby to místo "WindowsFormsApp2.Form2" otevíralo
"Form2.Form2".
Matěj
Zdarec. Nestačilo by ti to takto?
private void button1_Click(object sender, EventArgs e)
{
Form f = CreateFormFromClassName(textBoxClassName.Text);
if (f != null)
{
f.Dock = DockStyle.Fill;
f.TopLevel = false;
f.Visible = true;
f.FormBorderStyle = FormBorderStyle.None;
TabPage p = new TabPage(textBoxClassName.Text);
p.Controls.Add(f);
tabControl1.TabPages.Add(p);
}
}
private Form CreateFormFromClassName(string className)
{ //Form2 a Form3 musíš samozřejmě přilinkovat k projektu
switch(className)
{
case "Form2": return new Form2();
case "Form3": return new Form3();
default: return null;
}
}
Asi jsme se špatně pochopili.
Vytvořil jsem projekt Knihovna tříd .NET a vní formulář(aby to bylo v
souboru zvlášť od projektu). A teď potřebuji tento formulář zobrazit do
karty TabPage pomocí názvu v proměnné.
Ten tvůj předchozí kód funguje dobře, ale ten furmulář hledá v hlavním
projektu "WindowsFormsApp2.Form2" namísto ve vedlejším "Form2.Form2".
tak použij:
Assembly assembly = Assembly.LoadFile(_strUplnaCestaKeKnihovne);
Zobrazeno 10 zpráv z 10.