使用表单在 C# 中创建输入框

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1147190/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-06 09:21:51  来源:igfitidea点击:

Creating an Inputbox in C# using forms

c#winformsforms

提问by manemawanna

Hello I'm currently creating an application which has the need to add server IP addresses to it, as there is no InputBox function in C# I'm trying to complete this using forms, but am very new to the language so not 100% as to what I should do.

您好,我目前正在创建一个需要向其添加服务器 IP 地址的应用程序,因为 C# 中没有 InputBox 函数,我正在尝试使用表单来完成此操作,但我对该语言非常陌生,因此不是 100%我应该做什么。

At the moment I have my main form and a form which will act as my inputbox which wants to hide on load. Then when the user clicks on the add IP Address on the main form I wish to open up the secondary form and return the IP address entered into a text box on the secondary form.

目前我有我的主表单和一个表单,它将充当我的输入框,它想在加载时隐藏。然后当用户单击主表单上的添加 IP 地址时,我希望打开辅助表单并返回输入到辅助表单文本框中的 IP 地址。

So how would I go about doing this? Or is there any better ways to achieve similar results?

那么我该怎么做呢?或者有没有更好的方法来达到类似的结果?

采纳答案by Francis B.

In your main form, add an event handler for the event Clickof button Add Ip Address. In the event handler, do something similar as the code below:

在您的主窗体中,为事件Clickof button Add Ip Address添加一个事件处理程序。在事件处理程序中,执行类似于以下代码的操作:

private string m_ipAddress;
private void OnAddIPAddressClicked(object sender, EventArgs e)
{
    using(SetIPAddressForm form = new SetIPAddressForm())
    {
        if (form.ShowDialog() == DialogResult.OK)
        {
            //Create a property in SetIPAddressForm to return the input of user.
            m_ipAddress = form.IPAddress;
        }
    }
}

Edit: Add another example to fit with manemawannacomment.

编辑:添加另一个示例以符合manemawanna评论。

private void btnAddServer_Click(object sender, EventArgs e)
{
    string ipAdd;
    using(Input form = new Input())
    {
        if (form.ShowDialog() == DialogResult.OK)
        {
            //Create a property in SetIPAddressForm to return the input of user.
            ipAdd = form.IPAddress;
        }
    }
}

In your Input form, add a property:

在您的输入表单中,添加一个属性:

public class Input : Form
{
    public string IPAddress
    {
        get { return txtInput.Text; }
    }

    private void btnInput_Click(object sender, EventArgs e)
    {
        //Do some validation for the text in txtInput to be sure the ip is well-formated.

        if(ip_well_formated)
        {
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }
}

回答by malay

Add a button in main form.

在主窗体中添加一个按钮。

Create a form with textbox for ip address. (lets say it IPAddressForm)

创建一个带有 ip 地址文本框的表单。(可以说是 IPAddressForm)

Add click event handler for that button.

为该按钮添加单击事件处理程序。

In the event handler, create an instance of IPAddressForm and call showdialog method of IPAddressForm.

在事件处理程序中,创建 IPAddressForm 的实例并调用 IPAddressForm 的 showdialog 方法。

Store the ip address in some class variable.

将 ip 地址存储在某个类变量中。

If the showdialog result is ok, read the class variable from main form (simplest way is to declare the field as public)

如果 showdialog 结果没问题,从主窗体读取类变量(最简单的方法是将字段声明为 public)

回答by James

Looks like Francis has the correct idea which is what I would have suggested. However, just to add to this I would probably suggest using a MaskedTextBox instead of a basic TextBox and add the IP Address format as the Mask.

看起来弗朗西斯有正确的想法,这正是我所建议的。但是,为了添加到这一点,我可能会建议使用 MaskedTextBox 而不是基本的 TextBox,并将 IP 地址格式添加为掩码。

回答by ChuckB

You could just use the VB InputBox...

你可以只使用VB InputBox ...

  1. Add reference to Microsoft.VisualBasic
  2. string result = Microsoft.VisualBasic.Interaction.InputBox("Title","text", "", 10, 20);
  1. 添加对 Microsoft.VisualBasic 的引用
  2. 字符串结果 = Microsoft.VisualBasic.Interaction.InputBox("Title","text","", 10, 20);

回答by ChuckB

I've needed this feature, too. Here's my code; it auto-centers and sizes to fit the prompt. The public method creates a dialog and returns the user's input, or nullif they cancel.

我也需要这个功能。这是我的代码;它会自动居中并调整大小以适应提示。公共方法创建一个对话框并返回用户的输入,或者null如果他们取消。

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Utilities
{
public class InputBox
    {
    #region Interface
    public static string  ShowDialog(string prompt, string title, string defaultValue = null, int? xPos = null, int? yPos = null)
        {
        InputBoxDialog  form   = new InputBoxDialog(prompt, title, defaultValue, xPos, yPos);
        DialogResult    result = form.ShowDialog();
        if (result == DialogResult.Cancel)
            return null;
        else
            return form.Value;
        }
    #endregion

    #region Auxiliary class
    private class InputBoxDialog: Form
        {
        public string  Value  { get { return _txtInput.Text; } }

        private Label    _lblPrompt;
        private TextBox  _txtInput;
        private Button   _btnOk;
        private Button   _btnCancel;

        #region Constructor
        public InputBoxDialog(string prompt, string title, string defaultValue = null, int? xPos = null, int? yPos = null)
            {
            if (xPos == null && yPos == null)
                {
                StartPosition = FormStartPosition.CenterParent;
                }
            else
                {
                StartPosition = FormStartPosition.Manual;

                if (xPos == null)  xPos = (Screen.PrimaryScreen.WorkingArea.Width  - Width ) >> 1;
                if (yPos == null)  yPos = (Screen.PrimaryScreen.WorkingArea.Height - Height) >> 1;

                Location = new Point(xPos.Value, yPos.Value);
                }

            InitializeComponent();

            if (title == null)  title = Application.ProductName;
            Text = title;

            _lblPrompt.Text = prompt;
            Graphics  graphics = CreateGraphics();
            _lblPrompt.Size = graphics.MeasureString(prompt, _lblPrompt.Font).ToSize();
            int  promptWidth  = _lblPrompt.Size.Width;
            int  promptHeight = _lblPrompt.Size.Height;

            _txtInput.Location  = new Point(8, 30 + promptHeight);
            int  inputWidth = promptWidth < 206 ? 206 : promptWidth;
            _txtInput.Size      = new Size(inputWidth, 21);
            _txtInput.Text      = defaultValue;
            _txtInput.SelectAll();
            _txtInput.Focus();

            Height = 125 + promptHeight;
            Width  = inputWidth + 23;

            _btnOk.Location = new Point(8, 60 + promptHeight);
            _btnOk.Size     = new Size(100, 26);

            _btnCancel.Location = new Point(114, 60 + promptHeight);
            _btnCancel.Size     = new Size(100, 26);

            return;
            }
        #endregion

        #region Methods
        protected void  InitializeComponent()
            {
            _lblPrompt           = new Label();
            _lblPrompt.Location  = new Point(12, 9);
            _lblPrompt.TabIndex  = 0;
            _lblPrompt.BackColor = Color.Transparent;

            _txtInput          = new TextBox();
            _txtInput.Size     = new Size(156, 20);
            _txtInput.TabIndex = 1;

            _btnOk              = new Button();
            _btnOk.TabIndex     = 2;
            _btnOk.Size         = new Size(75, 26);
            _btnOk.Text         = "&OK";
            _btnOk.DialogResult = DialogResult.OK;

            _btnCancel              = new Button();
            _btnCancel.TabIndex     = 3;
            _btnCancel.Size         = new Size(75, 26);
            _btnCancel.Text         = "&Cancel";
            _btnCancel.DialogResult = DialogResult.Cancel;

            AcceptButton = _btnOk;
            CancelButton = _btnCancel;

            Controls.Add(_lblPrompt);
            Controls.Add(_txtInput);
            Controls.Add(_btnOk);
            Controls.Add(_btnCancel);

            FormBorderStyle = FormBorderStyle.FixedDialog;
            MaximizeBox = false;
            MinimizeBox = false;

            return;
            }
        #endregion
        }
    #endregion
    }
}

回答by Mahmut EFE

You can create your special messagebox. I created my messagebox for getting database information like below. And when the messagebox open, application stop during you click any button in related messagebox.

您可以创建您的特殊消息框。我创建了我的消息框以获取如下所示的数据库信息。当消息框打开时,应用程序会在您单击相关消息框中的任何按钮期间停止。

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;
using System.Data.Sql;

namespace Palmaris_Installation
{
    public class efexBox
    {
        public static string ShowDialog()
        {
            PopUpDatabase form = new PopUpDatabase();
            DialogResult result = form.ShowDialog();
            if (result == DialogResult.Cancel)
                return null;
            else
            {
                if (form.ValueAuthentication == "SQL Server Authentication")
                return form.Valueservername + "?" + form.ValueAuthentication + "?" + form.ValueUsername + "?" + form.ValuePassword;
                else
                    return form.Valueservername + "?" + form.ValueAuthentication + "?" + "" + "?" + "";
            }
        }

        public partial class PopUpDatabase : Form
        {
            public PopUpDatabase()
            {
                InitializeComponent();

                SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
                DataTable table = instance.GetDataSources();

                foreach (DataRow row in table.Rows)
                {
                    cmbServerName.Items.Add(row[0] + "\" + row[1]);
                }
                cmbAuthentication.Items.Add("Windows Authentication");
                cmbAuthentication.Items.Add("SQL Server Authentication");
                return;
            }

            private void InitializeComponent()
            {
                this.groupBox1 = new System.Windows.Forms.GroupBox();
                this.label1 = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.label3 = new System.Windows.Forms.Label();
                this.label4 = new System.Windows.Forms.Label();
                this.cmbServerName = new System.Windows.Forms.ComboBox();
                this.cmbAuthentication = new System.Windows.Forms.ComboBox();
                this.txtUserName = new System.Windows.Forms.TextBox();
                this.txtPassword = new System.Windows.Forms.TextBox();
                this.btnCancel = new System.Windows.Forms.Button();
                this.btnConnect = new System.Windows.Forms.Button();
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
                this.MaximizeBox = false;
                this.groupBox1.SuspendLayout();
                this.SuspendLayout();

                // 
                // groupBox1
                // 
                this.groupBox1.Controls.Add(this.btnConnect);
                this.groupBox1.Controls.Add(this.btnCancel);
                this.groupBox1.Controls.Add(this.txtPassword);
                this.groupBox1.Controls.Add(this.txtUserName);
                this.groupBox1.Controls.Add(this.cmbAuthentication);
                this.groupBox1.Controls.Add(this.cmbServerName);
                this.groupBox1.Controls.Add(this.label4);
                this.groupBox1.Controls.Add(this.label3);
                this.groupBox1.Controls.Add(this.label2);
                this.groupBox1.Controls.Add(this.label1);
                this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.groupBox1.Location = new System.Drawing.Point(0, 0);
                this.groupBox1.Name = "groupBox1";
                this.groupBox1.Size = new System.Drawing.Size(348, 198);
                this.groupBox1.TabIndex = 0;
                this.groupBox1.TabStop = false;
                this.groupBox1.Text = "Database Configration";
                this.groupBox1.BackColor = Color.Gray;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(50, 46);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(69, 13);
                this.label1.TabIndex = 0;
                this.label1.Text = "Server Name";
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(50, 73);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(75, 13);
                this.label2.TabIndex = 0;
                this.label2.Text = "Authentication";
                // 
                // label3
                // 
                this.label3.AutoSize = true;
                this.label3.Location = new System.Drawing.Point(50, 101);
                this.label3.Name = "label3";
                this.label3.Size = new System.Drawing.Size(60, 13);
                this.label3.TabIndex = 0;
                this.label3.Text = "User Name";
                // 
                // label4
                // 
                this.label4.AutoSize = true;
                this.label4.Location = new System.Drawing.Point(50, 127);
                this.label4.Name = "label4";
                this.label4.Size = new System.Drawing.Size(53, 13);
                this.label4.TabIndex = 0;
                this.label4.Text = "Password";
                // 
                // cmbServerName
                // 
                this.cmbServerName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                this.cmbServerName.FormattingEnabled = true;
                this.cmbServerName.Location = new System.Drawing.Point(140, 43);
                this.cmbServerName.Name = "cmbServerName";
                this.cmbServerName.Size = new System.Drawing.Size(185, 21);
                this.cmbServerName.TabIndex = 1;
                // 
                // cmbAuthentication
                // 
                this.cmbAuthentication.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                this.cmbAuthentication.FormattingEnabled = true;
                this.cmbAuthentication.Location = new System.Drawing.Point(140, 70);
                this.cmbAuthentication.Name = "cmbAuthentication";
                this.cmbAuthentication.Size = new System.Drawing.Size(185, 21);
                this.cmbAuthentication.TabIndex = 1;
                this.cmbAuthentication.SelectedIndexChanged += new System.EventHandler(this.cmbAuthentication_SelectedIndexChanged);
                // 
                // txtUserName
                // 
                this.txtUserName.Location = new System.Drawing.Point(140, 98);
                this.txtUserName.Name = "txtUserName";
                this.txtUserName.Size = new System.Drawing.Size(185, 20);
                this.txtUserName.TabIndex = 2;
                // 
                // txtPassword
                // 
                this.txtPassword.Location = new System.Drawing.Point(140, 124);
                this.txtPassword.Name = "txtPassword";
                this.txtPassword.Size = new System.Drawing.Size(185, 20);
                this.txtPassword.TabIndex = 2;
                // 
                // btnCancel
                // 
                this.btnCancel.Location = new System.Drawing.Point(250, 163);
                this.btnCancel.Name = "btnCancel";
                this.btnCancel.Size = new System.Drawing.Size(75, 23);
                this.btnCancel.TabIndex = 3;
                this.btnCancel.Text = "Cancel";
                this.btnCancel.UseVisualStyleBackColor = true;
                this.btnCancel.DialogResult = DialogResult.Cancel;
                // 
                // btnConnect
                // 
                this.btnConnect.Location = new System.Drawing.Point(140, 163);
                this.btnConnect.Name = "btnConnect";
                this.btnConnect.Size = new System.Drawing.Size(75, 23);
                this.btnConnect.TabIndex = 3;
                this.btnConnect.Text = "Connect";
                this.btnConnect.UseVisualStyleBackColor = true;
                this.btnConnect.DialogResult = DialogResult.OK;
                // 
                // PopUpDatabase
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(348, 198);
                this.Controls.Add(this.groupBox1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
                this.Name = "PopUpDatabase";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.Text = "::: Database Configration :::";
                this.groupBox1.ResumeLayout(false);
                this.groupBox1.PerformLayout();
                this.ResumeLayout(false);

            }

            private System.Windows.Forms.GroupBox groupBox1;
            private System.Windows.Forms.Label label4;
            private System.Windows.Forms.Label label3;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.TextBox txtPassword;
            private System.Windows.Forms.TextBox txtUserName;
            private System.Windows.Forms.ComboBox cmbAuthentication;
            private System.Windows.Forms.ComboBox cmbServerName;
            private System.Windows.Forms.Button btnConnect;
            private System.Windows.Forms.Button btnCancel;

            public string ValueUsername { get { return txtUserName.Text; } }
            public string ValuePassword { get { return txtPassword.Text; } }
            public string Valueservername { get { return cmbServerName.SelectedItem.ToString(); } }
            public string ValueAuthentication { get { return cmbAuthentication.SelectedItem.ToString(); } }

            private void cmbAuthentication_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cmbAuthentication.SelectedIndex == 1)
                {
                    txtUserName.Enabled = true;
                    txtPassword.Enabled = true;
                }
                else
                {
                    txtUserName.Enabled = false;
                    txtPassword.Enabled = false;
                }
            }
        }
    }
}

and in your main application call like :

并在您的主应用程序调用中,例如:

 string[] strPopUp = efexBox.ShowDialog().Split('?');