Diskuze: Proměnné neaktivního formu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 8 zpráv z 8.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Existuje něco jako Application.Forms, Application.OpenForms nebo tak, kde jsou uloženy všechny formy.
if (Application.OpenForms.OfType<Form1>().Any())
{
Application.OpenForms.OfType<Form1>().First(). -> instance/proměnné etc (nezapomeň jim změnit modifikátor, privátní neuvidíš);
}
Nebo si je můžeš nastavit na statické a přistupovat k nim přes
Form1.
Nebo můžeš do Program.cs napsat tohle:
public static Form1 mainFormInstance;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mainFormInstance = new Form1();
Application.Run(mainFormInstance);
}
A si dáš Program.mainFormInstance.
etc...
Jaký je tam potřeba using? zkoušel jsem to s tou instancí formu, ale nevím jaký je na "mainForm" potřeba using, když dám ten malý modrý obdelník tak nemám na výběr přidání usingu ale generate class for 'mainForm', generate new type...
Špatně jsem to pochopil, až pozdě mě napadlo že mainForm nepotřebuje using ale mám ho nahradit názvem formu
Můžeš vytvořit most mezi formy (Možná jednoduší řešení.):
Form1:
using System;
using System.Windows.Forms;
namespace WFASample
{
public partial class Form1 : Form
{
private Form2 f2;
public Form1()
{
InitializeComponent();
f2 = new Form2(this);
}
private void button1_Click(object sender, EventArgs e)
{
pozici dostaneš: MessageBox.Show(f2.ActualPosition.ToString());
f2.Show();
}
}
}
Form2:
using System;
using System.Windows.Forms;
using System.Drawing;
namespace WFASample
{
public partial class Form2 : Form
{
Form1 most = null;
public Form2(Form1 callingForm)
{
InitializeComponent();
most = callingForm as Form1;
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
public Point ActualPosition
{
get { return this.Location; }
}
}
}
Přijde mi to lepší, než řešit statiku atp... Jen poznámka - musel jsem nahradit ukončení formu Form2 za jeho skrytí, jelokož po jeho ukončení by nešlo Form2 znovu zavolat - při ukončení dojde ke smazní... Tento problém lze vyřešit novou inicializací.
Tedy před každé Show() bys musel dát:
f2 = new Form2(this);
O statiku tu nejde ta je přece už v konstuktoru Program.cs, tady jde jen o to dát si form do proměnné se kterou se dá pracovat jako s běžnou funkcí, a nechápu k čemu tvořit mosty mezi formy, chtěl jsem jen vědět jak volat funkce Form1.ActiveForm.() i v neaktivním formu
Zobrazeno 8 zpráv z 8.