Diskuze: Sdílení textové informace mezi dvěma Form
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= 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.
ve form2 si vytvoříš veřejnou metodu s parametrem co se má a kam napsat, tam si to vyíšeš v druhém formu. Pak na prvním formu zavoláš k instanci druhého tu metodu.
VB.NET:
Public Sub napisNeco(co, kam)
' A zde si to nějak zpracuješ
End Sub
Dim f2 As New Form2()
f2.napisNeco("Hello world", doTramtarie)
C#:
public void napisNeco(string co, label kam) {
// A zde si to nějak zpracuješ
}
Fomr2 f2 = new Form2();
f2.napisNeco("Hello world", doTramtarie);
Díky moc, hrabu se v tom a výsledek pořád nikde Tomu, co jsi napsal jsem
porozuměl, je to přesně to co potřebuji, ale pořád mi to nedělá, to co
chci - někde dělám něco blbě.
Mám Form1, kde je textBoxSemChciText a Button. Po kliknutí na Button se má
otevřít druhý form s názvem druheokno. Ve formu druhé okno je textBox, do
kterého se má zadat text a pak stisknout button. A ten to má poslat do Form1
do textBoxSemChciText a poté zavřít druheokno. Jenže se tam ten text
nepřenese Kde dělám
chybu?
namespace dvaformy
{
public partial class druheokno : Form
{
public druheokno()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 posli = new Form1();
posli.prenos(textBoxPreneseny.Text);
}
}
}
{
public partial class Form1 : Form
{
druheokno dotaz = new druheokno();
public Form1()
{
InitializeComponent();
}
public void prenos(string text)
{
textBoxSemChciText.Text = text;
dotaz.Close();
}
private void button1_Click(object sender, EventArgs e)
{
dotaz.Show();
}
}
}
Upravil bych to takto:
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string text;
private void button1_Click(object sender, EventArgs e)
{
druheokenko dotaz = new druheokenko();
if (dotaz.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
text = dotaz.textBox.Text;
textBoxSemChciText.Text = text;
}
}
}
}
Zde ve druhém Formu si klikni na button a ve vlastnostech (properties) si najdi vlastnost DialogResult a zadej tam OK.
namespace dvaformy
{
public partial class druheokno : Form
{
public druheokno()
{
InitializeComponent();
}
}
}
To je tak zbytečné. Udělej mimo vše onen Control. Nastav mu vlastnost Parent na Form, kde cheš, aby byl vidět. No a pak může buď mít vlastnost, co bude vracet hodnotu tohoto Controlu, nebo ještě lépe - Control bude v jediném zaujatém objektu - Main, odtud vytvoříš 2 Formy, jednoho nastavíš jako rodiče a druhému předáš hodnotu Controlu v eventu/metodě/...
ty to totiž posíláš na novou instanci, tedy vytvoříš nový form1. Vytvoř nový konstruktor v druheokno:
poblic druheokno(Form1 instance) {
this.form = instance;
}
pak tu metod volej na this.form, dále ještě při volání kostruktoru v form1 mu předem this.
druheokno dotaz = new druheokno(this);
při troše štěstí to bude fungovat.
Pokud by ti to předávání instancí nešlo, tak tu to máš celé:
http://misaz.wz.cz/…va_Formy.zip
Zobrazeno 9 zpráv z 9.