我有使用ShowDialog方法打开的表单。在这种形式我有一个名为更多的按钮。 如果我们点击更多它应该打开另一个表格,它应该关闭当前表格。
on More Button的Click事件Handler我写了以下代码
MoreActions objUI = new MoreActions ();
objUI.ShowDialog();
this.Close();
但是发生了什么,它并没有关闭第一种形式。所以,我将此代码修改为
MoreActions objUI = new MoreActions ();
objUI.Show();
this.Close();
此处显示第二种表单,并在几秒钟内关闭表单。
任何人都可以帮我解决问题。我需要做的是,如果我们点击更多按钮,它应该打开另一个表格并关闭第一个表格。
任何形式的帮助对我都有帮助。
答案 0 :(得分:50)
在我看来,主要表格应该负责打开两个儿童表格。这是一些伪解释我会做什么的:
// MainForm
private ChildForm childForm;
private MoreForm moreForm;
ButtonThatOpenTheFirstChildForm_Click()
{
childForm = CreateTheChildForm();
childForm.MoreClick += More_Click;
childForm.Show();
}
More_Click()
{
childForm.Close();
moreForm = new MoreForm();
moreForm.Show();
}
您只需要在第一个孩子中创建一个简单的事件MoreClick。这种方法的主要好处是您可以根据需要进行复制,并且可以非常轻松地为某种基本工作流建模。
答案 1 :(得分:36)
如果我找对你,你是这样想的吗?
进入这个?
在 Form1 中,在按钮中添加此事件:
// button event in your Form1
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog(); // Shows Form2
}
然后,在 Form2 中,在按钮中添加此事件:
// button event in your Form2
private void button1_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3(); // Instantiate a Form3 object.
f3.Show(); // Show Form3 and
this.Close(); // closes the Form2 instance.
}
答案 2 :(得分:13)
public partial class Form1 : Form
{
private void Button_Click(object sender, EventArgs e)
{
Form2 myForm = new Form2();
this.Hide();
myForm.ShowDialog();
this.Close();
}
}
这似乎工作正常,但第一种形式只是隐藏,它仍然可以生成事件。关闭第一个表单需要“this.Close()”但是如果你仍然希望表单运行(而不是像启动器那样)你必须用
替换它this.Show();
祝你好运!
答案 3 :(得分:6)
我会使用一个值,当更多按钮被关闭第一个对话框时被设置,然后让原始表单测试该值,然后显示那里的对话框。
对于Ex
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool DrawText = false;
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
if (f2.ShowMoreActions)
{
Form3 f3 = new Form3();
f3.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public bool ShowMoreActions = false;
private void button1_Click(object sender, EventArgs e)
{
ShowMoreActions = true;
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
答案 4 :(得分:3)
试试这个..
//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false; // this = is the current form
SignUp s = new SignUp(); //SignUp is the name of my other form
s.Visible = true;
}
答案 5 :(得分:1)
你可以考虑这个例子
//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
frm2.Show(this); //this will show Form2
frm1.Hide(); //this Form will hide
}
答案 6 :(得分:0)
例如,您有一个名为@Override
protected String doInBackground(String... params) {
Log.e("Test", "DOINBG Working..");
String storageUrl = "https://firebasestorage.googleapis.com/v0/b/frost-bird-1d290." +
"appspot.com/o/images.json?alt=media&token=b0a511d4-f0ea-4ee0-a063-69b7fd050f49";
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
StorageReference reference = firebaseStorage.getReferenceFromUrl(storageUrl);
final File localFile;
try {
localFile = File.createTempFile("images", "json");
FileDownloadTask task = reference.getFile(localFile);
try {
Tasks.await(task); // or use await with timeout: Tasks.await(task, 30, TimeUnit.SECONDS)
if (task.isSuccessful()) {
Toast.makeText(getContext(), "File downloaded successfully.", Toast.LENGTH_SHORT).show();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(localFile)));
StringBuilder result = new StringBuilder();
String line = null;
while((line.concat(String.valueOf(reader.read()))) != null){
Log.e("Test", "Result - "+ result);
result.append(line);
}
finalRes.concat(result.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Log.e("Test", "Failed: " + task.getException().getMessage());
Toast.makeText(getContext(), "File downloading failed", Toast.LENGTH_LONG).show();
}
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
Log.e("Test", "String Downloaded- "+finalRes);
return finalRes;
}
的{{1}}。首先点击它会打开Button
的{{1}}来调用另一个Button1
,您应该将以下代码写入您的按钮。
EventHandler
要关闭form1,请编写以下代码:
Button2
要么
Form
答案 7 :(得分:0)
您可以尝试添加bool,以便算法知道按钮何时被激活。单击它时,bool检查为true,新表单显示,最后一个表单关闭。
重要的是要知道表单会消耗一些ram(至少一点点),所以关闭那些你不会使用的东西是个好主意,而不是仅仅隐藏它。在大项目中发挥作用。
答案 8 :(得分:0)
private void Button1_Click(object sender, EventArgs e)
{
NewForm newForm = new NewForm(); //Create the New Form Object
this.Hide(); //Hide the Old Form
newForm.ShowDialog(); //Show the New Form
this.Close(); //Close the Old Form
}
答案 9 :(得分:0)
您需要控制主窗体中子窗体的打开。
对于我来说,在启动form1之前,我首先要打开一个Login窗口。我从Program.cs控制所有内容。在Program.cs中设置一个验证标志。从Program.cs打开“登录”窗口。然后控制进入登录窗口。然后,如果验证良好,则从登录窗口将验证标志设置为true。现在,您可以安全地关闭登录窗口。控制返回到Program.cs。如果验证标志为true,请打开form1。如果验证标志为false,则您的应用程序将关闭。
在Program.cs中:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
//Validation flag
public static bool ValidLogin = false;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
if (ValidLogin)
{
Application.Run(new Form1());
}
}
}
在Login.cs中:
private void btnOK_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "x" && txtPassword.Text == "x")
{
Program.ValidLogin = true;
this.Close();
}
else
{
MessageBox.Show("Username or Password are incorrect.");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
答案 10 :(得分:0)
使用this.Hide()代替this.Close()