Can';当新表单出现时,t单击其他表单C#
我正在制作一个ATM模拟器,目前我正试图在一个表单上有一个按钮来创建另一个表单(ATM)。我已经能够做到这一点,但只有一个表单,因为当新表单出现时,我无法点击另一个有“添加atm”按钮的表单。我已经尝试过使用C运行Can';当新表单出现时,t单击其他表单C#,c#,winforms,forms,C#,Winforms,Forms,我正在制作一个ATM模拟器,目前我正试图在一个表单上有一个按钮来创建另一个表单(ATM)。我已经能够做到这一点,但只有一个表单,因为当新表单出现时,我无法点击另一个有“添加atm”按钮的表单。我已经尝试过使用C运行Form.Show、Form.ShowDialog和Applications.Run() 代码如下: public class Program { private Account[] ac = new Account[3]; private AT
Form.Show
、Form.ShowDialog
和Applications.Run()
代码如下:
public class Program
{
private Account[] ac = new Account[3];
private ATM atm;
public Form1 form1;
/* This function initilises the 3 accounts
* and instanciates the ATM class passing a referance to the account information
*/
public Program()
{
ac[0] = new Account(300, 1111, 111111);
ac[1] = new Account(750, 2222, 222222);
ac[2] = new Account(3000, 3333, 333333);
Thread form1thread = new Thread(new ThreadStart(startform)); //Creates ATM Form
//Thread atm2 = new Thread(new ThreadStart(start));
form1thread.Start();
//atm2.Start();
}
static void Main(string[] args)
{
new Program();
}
public void startform()
{
form1 = new Form1(this);
form1.ShowDialog();
}
public void newatm()
{
atm = new ATM(ac);
atm.ShowDialog();
}
public void makethread()
{
Thread newatm = new Thread(new ThreadStart(startform));
newatm.Start();
}
}
表格1:
public partial class Form1 : Form
{
Program program;
public Form1(Program program)
{
InitializeComponent();
this.program = program;
}
private void Form1_Load(object sender, EventArgs e)
{
this.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
program.newatm();
}
}
如果不希望表单成为模式对话框,请使用表单的
Show
方法,而不是ShowDialog
方法
您还需要确保从UI线程而不是后台线程创建和显示表单。基于您的代码,您根本不需要创建后台线程,只需直接从构造函数创建/显示表单。如果您不希望表单成为模式对话框,请使用表单的
show
方法而不是ShowDialog
方法
您还需要确保从UI线程而不是后台线程创建和显示表单。基于您的代码,您根本不需要创建后台线程,只需直接从构造函数创建/显示表单。可能是因为您正在代码中的某个地方执行ShowModal。。您是否可以显示您正在使用的代码,以便我们可以限制所有猜测工作..?您是否使用Windows窗体或WPF?可能是因为您正在代码中的某个位置执行ShowModal。。您能否显示您正在使用的代码,以便我们可以限制所有猜测工作..?您使用的是Windows窗体还是WPF?如果我使用show,则会出现一个错误,告诉我使用ShowDialog,因为我正在使用threads@SnazzyWolf然后不要从后台线程创建/显示表单。从UI线程创建并显示表单。应通过UI线程创建/访问所有控件。如果需要先在后台线程中执行其他工作,则使用
BackgroundWorker
或控件封送回UI线程。BeginInvoke
以显示新表单。根据您编辑的代码,不需要执行任何操作,只是首先不要启动新线程。我需要使用线程,这是task@SnazzyWolf如果你的任务是使用线程,那么你应该适当地使用它们。这不是对线程类的适当使用。您应该创建一个新线程来执行长时间运行的非UI工作。如果您需要一个在线程中执行工作的示例,请拿出一个与UI无关的任务来执行。如果我使用Show,则会出现一个错误,告诉我使用ShowDialog,因为我正在使用threads@SnazzyWolf然后不要从后台线程创建/显示表单。从UI线程创建并显示表单。应通过UI线程创建/访问所有控件。如果需要先在后台线程中执行其他工作,则使用BackgroundWorker
或控件封送回UI线程。BeginInvoke
以显示新表单。根据您编辑的代码,不需要执行任何操作,只是首先不要启动新线程。我需要使用线程,这是task@SnazzyWolf如果你的任务是使用线程,那么你应该适当地使用它们。这不是对线程类的适当使用。您应该创建一个新线程来执行长时间运行的非UI工作。如果您需要一个在线程中执行工作的示例,请提出一个与UI无关的任务来执行。