Создание Inputbox в C# с помощью форм

Привет я в настоящее время создаю приложение, которое имеет необходимость добавлять к нему IP-адреса сервера, так как в C# нет функции InputBox, я пытаюсь завершить это с помощью форм, но я очень новичок в языке, поэтому не 100% о том, что я должен делать.

на данный момент у меня есть моя основная форма и форма, которая будет действовать как мой inputbox, который хочет скрыть при загрузке. Затем, когда пользователь нажимает на добавить IP-адрес в основной форме, я хочу открыть вторичную форму и вернуть IP-адрес адрес, введенный в текстовое поле вторичной формы.

Итак, как бы я это сделал? Или есть какие-то лучшие способы достичь подобных результатов?

6 ответов


в основной форме добавьте обработчик событий для события клик кнопки Добавить 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();
        }
    }
}

мне тоже нужна эта функция. Вот мой код; он автоцентров и размеров, чтобы соответствовать подсказке. Метод 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
    }
}

добавить кнопку в главной форме.

создайте форму с текстовым полем для ip-адреса. (скажем, это IPAddressForm)

добавить обработчик событий click для этой кнопки.

в обработчике событий создайте экземпляр IPAddressForm и вызовите метод showdialog метода IPAddressForm.

сохраните ip-адрес в некоторой переменной класса.

Если результат showdialog в порядке, прочитайте переменную класса из основной формы (самый простой способ объявить поле как public)


похоже, у Фрэнсиса есть правильная идея, которую я бы предложил. Однако, чтобы добавить к этому, я бы, вероятно, предложил использовать MaskedTextBox вместо базового текстового поля и добавить формат IP-адреса в качестве маски.


вы можете просто использовать VB InputBox...

  1. добавить ссылку на Microsoft.VisualBasic
  2. результат строки = Microsoft.На языке VisualBasic.Взаимодействие.InputBox ("заголовок", "текст", "", 10, 20);

Вы можете создать свой специальный messagebox. Я создал свой MessageBox для получения информации о базе данных, как показано ниже. И когда messagebox открыт, приложение останавливается во время нажатия любой кнопки в соответствующем 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;
                }
            }
        }
    }
}

и в вашем главном приложении вызовите как:

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