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

时间:2009-07-18 10:22:30

标签: c# winforms forms

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

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

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

6 个答案:

答案 0 :(得分:9)

在主窗体中,为事件添加事件处理程序单击按钮添加IP地址。在事件处理程序中,执行与以下代码类似的操作:

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;
        }
    }
}

修改:添加另一个示例以符合 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;
        }
    }
}

在“输入”表单中,添加属性:

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();
        }
    }
}

答案 1 :(得分:2)

我也需要这个功能。这是我的代码;它自动居中和大小以适应提示。 public方法创建一个对话框并返回用户的输入,如果取消,则为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
    }
}

答案 2 :(得分:1)

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

使用ipbox的文本框创建一个表单。 (比方说IPAddressForm)

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

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

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

如果showdialog结果正常,请从主窗体中读取类变量(最简单的方法是将该字段声明为public)

答案 3 :(得分:1)

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

答案 4 :(得分:1)

你可以使用VB InputBox ......

  1. 添加对Microsoft.VisualBasic的引用
  2. string result = Microsoft.VisualBasic.Interaction.InputBox(“Title”,“text”,“”,10,20);

答案 5 :(得分:0)

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

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;
                }
            }
        }
    }
}

并在您的主要应用程序中调用:

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