C# 从另一个窗体访问窗体
我试图将三角形显示到第一个窗体(称为C# 从另一个窗体访问窗体,c#,winforms,C#,Winforms,我试图将三角形显示到第一个窗体(称为MainForm),我创建了另一个窗体(CarreGen),它要求用户选择1到15之间的值(X和Y),但问题是我将窗体链接在一起,当我单击按钮时,三角形没有显示 要显示的标签=lblResultat PS:我试图寻找答案,但我仍然被这个错误所困扰 MainForm.cs: private void carréToolStripMenuItem_Click(object sender, EventArgs e) { carrG.Show(); //dec
MainForm
),我创建了另一个窗体(CarreGen
),它要求用户选择1到15之间的值(X和Y),但问题是我将窗体链接在一起,当我单击按钮时,三角形没有显示
要显示的标签=lblResultat
PS:我试图寻找答案,但我仍然被这个错误所困扰
MainForm.cs:
private void carréToolStripMenuItem_Click(object sender, EventArgs e)
{
carrG.Show(); //declared before
}
public void GenCarre()
{
try
{
for (int i = 0; i < carrG.nombre; i++)
{
lblResultat.Text = "\n";
for (int j = 0; j < carrG.nombre; j++)
{
lblResultat.Text = "\t \t *";
}
}
Figgen();
}
catch (Exception)
{
throw new Exception("Erreur lors de la génération.");
}
}
private void carréToolStripMenuItem_Click(对象发送方,事件参数e)
{
carrG.Show();//之前声明
}
公共资源(GenCarre)
{
尝试
{
for(int i=0;i
CarreGen.cs:
public partial class CarreGen : Form
{
public int nombre;
public bool CGen;
public CarreGen()
{
InitializeComponent();
}
void Figgen()
{
MessageBox.Show("Figure générée avec succès !", "Succès",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
private void btnGenCarre_Click(object sender, EventArgs e)
{
FormMain mform = new FormMain();
if(!int.TryParse(txtInt.Text,out nombre))
{
MessageBox.Show("Vous n'avez pas saisi un chiffre !",
"Erreur", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else if(int.TryParse(txtInt.Text,out nombre))
{
if (nombre <= 0)
{
MessageBox.Show("La valeur est inférieure à 1.\nVeuillez saisir une valeur entre 0 et 15.","Erreur",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else if (nombre > 16)
{
MessageBox.Show("La valeur est supérieure à 15.\nVeuillez saisir une valeur entre 0 et 15.", "Erreur",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else
{
Hide();
mform.GenCarre();
}
}
else
{
MessageBox.Show("Erreur lors de la génération du carré.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
公共部分类CarreGen:表单
{
公共国际名称;
公共图书馆;
公共事业()
{
初始化组件();
}
void Figgen()
{
MessageBox.Show(“图générée avec success!”,“success”,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
私有无效btnGenCarre\u单击(对象发送者,事件参数e)
{
FormMain mform=新FormMain();
如果(!int.TryParse(txtInt.Text,out nombre))
{
MessageBox.Show(“你有空!”,
“Erreur”,MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else if(int.TryParse(txtInt.Text,out nombre))
{
如果(名称16)
{
MessageBox.Show(“La valeur est supérieureá15.\nVeilez saiser une valeur entre 0 et 15.”,“Erreur”,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
其他的
{
隐藏();
mform.GenCarre();
}
}
其他的
{
MessageBox.Show(“Erreur lors de la génération du carré.”,“Erreur”,MessageBoxButtons.OK,MessageBoxIcon.Error);
返回;
}
}
}
尝试使用界面连接表单
以下是我的解决方案:
- 创建只有一种方法的新接口
iRequestStor
public interface IRequestor { void SetNumber(double valueBetween1and15); }
- 修改
以使用此界面,例如MainForm
public partial class MainForm : Form, IRequestor { public MainForm() { InitializeComponent(); } private double number; public void SetNumber(double valueBetween1and15) { number = valueBetween1and15; } private void button1_Click(object sender, EventArgs e) { var carreGenForm = new CarreGen(this); carreGenForm.ShowDialog(); // After that you can use 'number' // further code } }
- 修改
表单以获得指向CarreGen
的链接:IRequestor
public partial class CarreGen : Form { private IRequestor requestor; public CarreGen(IRequestor requestor) { this.requestor = requestor; InitializeComponent(); } private void BtnGenCarre_Click(object sender, EventArgs e) { // some code... double number = 17; // Send value to MainForm requestor.SetNumber(number); // Close form this.Close(); } }
CarreGen
)向第一个表单发送一个数字,然后才真正关闭。再看一遍代码!!!this.close在第一个窗体读取数字之前处理了第二个窗体。然后,您有一个竞争条件,幸运的是一个进程在另一个进程处理对象之前执行。老实说,this.close()
在那里是不必要的。第二个窗体可以由用户通过交叉按钮或其他方式关闭。但它将数据发送到第一个表单。