我如何使用Form.ShowDialog?

时间:2012-09-16 02:51:05

标签: c#

private void button2_Click(object sender, EventArgs e)
        {
            ChangeLink cl = new ChangeLink();
            // Show testDialog as a modal dialog and determine if DialogResult = OK.
            if (cl.ShowDialog() == DialogResult.OK)
            {
                // Read the contents of testDialog's TextBox. 
               // cl.AcceptButton.DialogResult = DialogResult.OK;
                this.label4.Text = cl.textBox1Text;
            }
            else
            {
                this.label4.Text = "Cancelled";
            }
            cl.Dispose();

        }

当我点击按钮时,我在新表格中看到新表格和textBox1,我可以输入textBox1,但我没有看到OK或CANCEL按钮。我应该在新的表单设计器中手动添加它们吗?然后如何使用它们?

这是我新表单中的代码,我想要做的是在新表单textBox1中键入内容并将textBox1中的文本传递给Form1 label4。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GatherLinks
{
    public partial class ChangeLink : Form
    {
        public ChangeLink()
        {
            InitializeComponent();


        }

        public string textBox1Text
        {
            get
            {
                return textBox1Text = textBox1.Text;
            }
            set
            {

            }
        }
    }
}

那么Form.ShowDialog的OK和CANCEL按钮在哪里?

4 个答案:

答案 0 :(得分:21)

您需要自行添加,您可以将按钮添加到Form并设置其DialogResult属性。这将返回DialogResult并关闭表单,而无需连接任何代码。下面是一个使用Method返回Form2上TextBox的值的示例(Form2上有两个按钮,其DialogResults设置为Cancel和Ok)。

<强> Form1中

public partial class Form1 : Form
{
    Form2 frm2;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2 = new Form2();
        DialogResult dr = frm2.ShowDialog(this);
        if (dr == DialogResult.Cancel)
        {
            frm2.Close();
        }
        else if (dr == DialogResult.OK)
        {
            textBox1.Text = frm2.getText();
            frm2.Close();
        }
    }
}

<强>窗体2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public string getText()
    {
        return textBox1.Text;
    }
}

答案 1 :(得分:2)

鉴于你唯一的标签是C#,并且你期望一个OK和CANCEL按钮,在我看来你实际上在寻找MessageBox功能。 仅仅为了显示消息框对话框而创建和处理表单是不可取的。

if (MessageBox.Show("boxtext", "boxcaption" MessageBoxButtons.OKCancel) == DialogResult.OK) 
{
// Read the contents of testDialog's TextBox. 
// cl.AcceptButton.DialogResult = DialogResult.OK;
this.label4.Text = cl.textBox1Text;
}else
{
    this.label4.Text = "Cancelled";
}

MessageBox是同名WIN32 API函数的包装器:

int WINAPI MessageBox(
  _In_opt_  HWND hWnd,
  _In_opt_  LPCTSTR lpText,
  _In_opt_  LPCTSTR lpCaption,
  _In_      UINT uType
);

注意:如果您已经有一个窗口句柄/表单,请确保将其作为第一个参数传递给MessageBox。

答案 2 :(得分:0)

你想要的是visualbasic命名空间的输入框,是的你可以在c#

中使用它

Microsoft.VisualBasic.Interaction.InputBox

答案 3 :(得分:0)

如果您从基本表单类创建表单,则需要定义一个按钮,该按钮在按钮的属性中返回DialogResult

这些在FileDialogMessageBox等中最有用。其中类是MS定义的形式。