Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/256: Рейтинг темы: голосов - 256, средняя оценка - 4.52
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58

Необходим аналог функции InputBox()

10.09.2009, 06:50. Показов 47971. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На определенном этапе выполнения программы необходимо ввести некие данные по запросу, т.е. должно выскочить окошечко с вопросом типа "Введите такое-то значение", поле ввода для этого значения и кнопки ОК/Отмена (типа функции InputBox() в VB).
Рекомендуемая обычно нижеприведенная связка не прокатывает, т.к. она не запускается из формы в графическом режиме.
C#
1
2
Console.WriteLine("Введите такое-то значение: "); 
string str = Console.ReadLine();
Если ли в C# какая-нибудь аналогичная InputBox функция или надо создавать специальную форму ввода?

Добавлено через 52 минуты
Если такой функции нет и необходимо ее создавать самому, то может уже есть готовое решение, чтоб не тратить лишнее время?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2009, 06:50
Ответы с готовыми решениями:

Аналог функции InputBox из VB
есть ли в С# функия типа InputBox в Visual Basic?

Необходим динамический двумерный массив из строк, аналог Dictionary
Мне необходим динамический двумерный массив из строк, с методом Add, по аналогии с Dictionary способный хранить повторяющиеся значения....

Аналог InputBox (из VB.NET) в C#
Вроде бы как ничего трудного нет. Однако Нужно создать MessageBox в проекте(не на форме) и чтобы переменная принимала значения из этого...

10
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
10.09.2009, 08:34
В свое время нашел на просторах инета
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public class InputBox : Form
    {
        private InputBox(string Caption, string Text)
        {
            this.label = new System.Windows.Forms.Label();
            this.textValue = new System.Windows.Forms.TextBox();
            this.buttonOK = new System.Windows.Forms.Button();
            this.buttonCancel = new System.Windows.Forms.Button();
            this.SuspendLayout();
            this.label.AutoSize = true;
            this.label.Location = new System.Drawing.Point(9, 13);
            this.label.Name = "label";
            this.label.Size = new System.Drawing.Size(31, 13);
            this.label.TabIndex = 1;
            this.label.Text = Text;
            this.textValue.Location = new System.Drawing.Point(12, 31);
            this.textValue.Name = "textValue";
            this.textValue.Size = new System.Drawing.Size(245, 20);
            this.textValue.TabIndex = 2;
            this.textValue.WordWrap = false;
            this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.buttonOK.Location = new System.Drawing.Point(57, 67);
            this.buttonOK.Name = "buttonOK";
            this.buttonOK.Size = new System.Drawing.Size(75, 23);
            this.buttonOK.TabIndex = 3;
            this.buttonOK.Text = "OK";
            this.buttonOK.UseVisualStyleBackColor = true;
            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.buttonCancel.Location = new System.Drawing.Point(138, 67);
            this.buttonCancel.Name = "buttonCancel";
            this.buttonCancel.Size = new System.Drawing.Size(75, 23);
            this.buttonCancel.TabIndex = 4;
            this.buttonCancel.Text = "Cancel";
            this.buttonCancel.UseVisualStyleBackColor = true;
            this.AcceptButton = this.buttonOK;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.CancelButton = this.buttonCancel;
            this.ClientSize = new System.Drawing.Size(270, 103);
            this.Controls.Add(this.buttonCancel);
            this.Controls.Add(this.buttonOK);
            this.Controls.Add(this.textValue);
            this.Controls.Add(this.label);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "InputBox";
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = Caption;
            this.ResumeLayout(false);
            this.PerformLayout();
        }
 
        
        public static bool Query(string Caption, string Text, ref string s_val)
        {
            InputBox ib = new InputBox(Caption, Text);
            ib.textValue.Text = s_val;
            if (ib.ShowDialog() != DialogResult.OK) return false;
            s_val = ib.textValue.Text;
            return true;
        }
 
        public static bool InputValue(string Caption, string Text, string prefix, string format, ref int value, int min, int max)
        {
            int val = value;
 
            string s_val = prefix + value.ToString(format);
            bool OKVal;
            do
            {
                OKVal = true;
                if (!Query(Caption, Text, ref s_val)) return false;
 
                try
                {
                    string sTr = s_val.Trim();
 
                    if ((sTr.Length > 0) && (sTr[0] == '#'))
                    {
                        sTr = sTr.Remove(0, 1);
                        val = Convert.ToInt32(sTr, 16);
                    }
                    else if ((sTr.Length > 1) && ((sTr[1] == 'x') && (sTr[0] == '0')))
                    {
                        sTr = sTr.Remove(0, 2);
                        val = Convert.ToInt32(sTr, 16);
                    }
                    else
                        val = Convert.ToInt32(sTr, 10);
                }
                catch { MessageBox.Show("Требуется ввести число!"); OKVal = false; }
                if ((val < min) || (val > max)) { MessageBox.Show("Требуется число в диапазоне " + min.ToString() + "..." + max.ToString() + " !"); OKVal = false; }
            } while (!OKVal);
            value = val;
            return true;
        }
 
        private System.Windows.Forms.Label label;
        private System.Windows.Forms.TextBox textValue;
        private System.Windows.Forms.Button buttonOK;
        private System.Windows.Forms.Button buttonCancel;
    }
1
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
10.09.2009, 09:07  [ТС]
Спасибо kirill29, я уже нашел более простой вариант, как раз то, что надо:
<Сылка> IT-Skyline

Я в него добавил Label1 и вывод запроса сделал не в заголовок, а в эту этикетку, ширину этикетки ограничил через MaximumSize и включил AutoSize (это чтобы можно было вводить достаточно большие тексты запросов). Само собой, что для увеличения вертикального размера этикетки в форме необходимо оставить достаточно свободного места. И еще убрал лишние фокусы с графикой. Вот адаптированный вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public partial class InputBox : Form
    {
        // the InputBox
        private static InputBox newInputBox;
        // строка, которая будет возвращена форме запроса
        private static string returnString;
 
        public InputBox()
        {
            InitializeComponent();
        }
        public static string Show(string inputBoxText)
        {
            newInputBox = new InputBox();
            newInputBox.label1.Text = inputBoxText;
            newInputBox.ShowDialog();
            return returnString;
        }
 
        private void buttonOk_Click(object sender, EventArgs e)
        {
            returnString = textBox1.Text;
            newInputBox.Dispose();
        }
 
        private void buttonCancel_Click(object sender, EventArgs e)
        {
            returnString = string.Empty;
            newInputBox.Dispose();
        }
    }
Данный вариант работает, проверил в своей программе.
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 29
21.10.2010, 04:49
Цитата Сообщение от sergo_ukr Посмотреть сообщение
Спасибо kirill29, я уже нашел более простой вариант, как раз то, что надо:
<Сылка> IT-Skyline

Я в него добавил Label1 и вывод запроса сделал не в заголовок, а в эту этикетку, ширину этикетки ограничил через MaximumSize и включил AutoSize (это чтобы можно было вводить достаточно большие тексты запросов). Само собой, что для увеличения вертикального размера этикетки в форме необходимо оставить достаточно свободного места. И еще убрал лишние фокусы с графикой. Вот адаптированный вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public partial class InputBox : Form
    {
        // the InputBox
        private static InputBox newInputBox;
        // строка, которая будет возвращена форме запроса
        private static string returnString;
 
        public InputBox()
        {
            InitializeComponent();
        }
        public static string Show(string inputBoxText)
        {
            newInputBox = new InputBox();
            newInputBox.label1.Text = inputBoxText;
            newInputBox.ShowDialog();
            return returnString;
        }
 
        private void buttonOk_Click(object sender, EventArgs e)
        {
            returnString = textBox1.Text;
            newInputBox.Dispose();
        }
 
        private void buttonCancel_Click(object sender, EventArgs e)
        {
            returnString = string.Empty;
            newInputBox.Dispose();
        }
    }
Данный вариант работает, проверил в своей программе.
Пожалуйста, подскажите как использовать эту функцию. Я в С# только начинаю, не могу понять как вызвать функцию и использовать введенный текст в поле. У меня форма появляется, а кнопки ОК и ОТМЕНА не реагируют никак.

Мне надо чтобы по нажатию кнопок в главной форме выскакивал этот инпутбокс и по нажатию ОК выполнялась моя функция с текстом из поля ввода.

Вроде понятно изложил

Всем заранее спасибо!
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
21.10.2010, 10:30
newInputBox.Dispose(); надо заменить на newInputBox.Close();, кроме того, кнопки ОК и Отмена желательно назначить в свойствах формы AcceptButton и CancelButton соответственно. И еще маленький совет - начинайте подобные свои функции собирать в библиотеку - потом кучу времени сэкономите.
2
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 29
21.10.2010, 19:32
Цитата Сообщение от planar Посмотреть сообщение
newInputBox.Dispose(); надо заменить на newInputBox.Close();, кроме того, кнопки ОК и Отмена желательно назначить в свойствах формы AcceptButton и CancelButton соответственно. И еще маленький совет - начинайте подобные свои функции собирать в библиотеку - потом кучу времени сэкономите.
Спасибо большое! И про библиотеки тоже - учту
0
 Аватар для sergo_ukr
8 / 8 / 0
Регистрация: 22.07.2009
Сообщений: 58
22.10.2010, 19:40  [ТС]
Посе нажатия кнопки ОК значение поля ввода запоминается в переменной:

returnString = textBox1.Text

После нажатия Cancel ничего не запоминается, а просто форма InputBox() выгружается.

Поскольку у меня данная функция создана внутри формы ввода данных, то в пределах этой формы данная переменная может использоваться где угодно.
Например участвовать в вычислении, только не забыть при этом преобразовать текст в число - т.е. в поле ввода вы ввели например "3" - это текст, а для вычисления его надо преобразовать в число соответствующего типа, что-то типа а = CDbl(returnString) * 5 + 5.123
Можно эту переменную использовать в качестве содержимого сообщения, например label1.text = returnString
Да в общем много чего можно сделать. Все зависит от конкретной задачи.
А вот в каком месте программы эта переменная будет видна, а где нет - тут уже куча нюансов, но это в двух словах не объяснишь, тут надо разбираться конкретно. Только из меня разборщик плохой, я сам пока на уровне ниже среднего :-(
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
22.10.2010, 21:30
Нужно определить так
C#
1
2
3
4
5
6
7
8
public string ReturnString { get; set;}
 
//Пример работы 
InputBox ib=new InputBox();
if (ib.ShoqDialog()==DialogResult.Ok)
{
          string whatNeeded=ib.ReturnString;
}
0
45 / 45 / 7
Регистрация: 28.05.2009
Сообщений: 87
17.06.2011, 16:08
ужас сколько движений О_о. нашел на просторах инета как сделать намного проще
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System.Windows.Forms;
using System.Drawing;
 
 
//1.добаляем функцию
public static DialogResult InputBox(string title, string promptText, ref string value)
{
  Form form = new Form();
  Label label = new Label();
  TextBox textBox = new TextBox();
  Button buttonOk = new Button();
  Button buttonCancel = new Button();
 
  form.Text = title;
  label.Text = promptText;
  textBox.Text = value;
 
  buttonOk.Text = "OK";
  buttonCancel.Text = "Cancel";
  buttonOk.DialogResult = DialogResult.OK;
  buttonCancel.DialogResult = DialogResult.Cancel;
 
  label.SetBounds(9, 20, 372, 13);
  textBox.SetBounds(12, 36, 372, 20);
  buttonOk.SetBounds(228, 72, 75, 23);
  buttonCancel.SetBounds(309, 72, 75, 23);
 
  label.AutoSize = true;
  textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
  buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
 
  form.ClientSize = new Size(396, 107);
  form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
  form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
  form.FormBorderStyle = FormBorderStyle.FixedDialog;
  form.StartPosition = FormStartPosition.CenterScreen;
  form.MinimizeBox = false;
  form.MaximizeBox = false;
  form.AcceptButton = buttonOk;
  form.CancelButton = buttonCancel;
 
  DialogResult dialogResult = form.ShowDialog();
  value = textBox.Text;
  return dialogResult;
}
 
//2. используем ее
string value = "Document 1";
if (Tmp.InputBox("New document", "New document name:", ref value) == DialogResult.OK)
{
  myDocument.Name = value; // value - и есть введенное значение
}
2
44 / 44 / 6
Регистрация: 16.11.2010
Сообщений: 110
13.11.2011, 11:12
Лучший ответ Сообщение было отмечено как решение

Решение

Можно еще так:
В меню Project выбираем пункт Add Reference и в диалоговом окне ищем элемент Microsoft.VisualBasic.dll далее в редакторе кода добавляем:
C#
1
using Microsoft.VisualBasic;
и это позволит нам непосредственно использовать InputBox, например:
C#
1
String ip = Microsoft.VisualBasic.Interaction.InputBox("Введите IP","Ввод IP","127.0.0.1",100,100);
9
 Аватар для yariko
14 / 11 / 6
Регистрация: 28.11.2016
Сообщений: 69
Записей в блоге: 11
09.06.2017, 12:37
Можно ещё так реализовать INPUTBOX. На примере окна для переименования файла.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        string path;
        private void RenameFile(string newpath)//вызываем INPUTBOX для переименование файла
        {
                path = string newpath;//путь к файлу
                Form form = new Form();
                TextBox t1 = new TextBox();
                Button b1 = new Button();
                Button b2 = new Button();
                b2.Click += new System.EventHandler(ButtonCancel_Click);
                b2.Size = Size.Empty;
                form.Width = 0;
                form.Height = 0;
                form.AutoSize = true;
                form.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                form.MaximizeBox = false;
                form.MinimizeBox = false;
                form.StartPosition = FormStartPosition.CenterParent;
                form.ShowInTaskbar = false;
                form.AcceptButton = b1;
                form.CancelButton = b2;
                form.Text = "Переименование";
                t1.Width = 350;
                t1.Text = Path.GetFileNameWithoutExtension(path);
                t1.TextChanged += new System.EventHandler(TextBoxRename_TextChanged);
                form.Controls.Add(t1);
                b1.Text = "Принять";
                b1.Click += new System.EventHandler(ButtonRename_Click);
                b1.Left = t1.Right + 5;
                form.Controls.Add(b1);
                form.Controls.Add(b2);
                form.ShowDialog();
        }
        private void TextBoxRename_TextChanged(object sender, EventArgs e)//переименование файла
        {
            TextBox t1 = (TextBox)sender;
            t1.Parent.Tag = t1.Text;
        }
        private void ButtonRename_Click(object sender, EventArgs e)//подтверждение переименование файла
        {
            Button b = (Button)sender;
            if (b.Parent.Tag != null)
            {
                string dir = Path.GetDirectoryName(path);
                string ext = Path.GetExtension(path);
                string newPath = Path.Combine(dir, b.Parent.Tag.ToString() + ext);
                try
                {
                    System.IO.File.Move(path, newPath);//задаем новое имя
                }
                catch(Exception ex)
                {
                    ShowErrorMessage(ERROR, ex.Message);
                }
            }
            b.Parent.Dispose();
        }
        private void ButtonCancel_Click(object sender, EventArgs e)//отмена переименование
        {
            Button b = (Button)sender;
            b.Parent.Dispose();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2017, 12:37
Помогаю со студенческими работами здесь

Аналог inputbox на сервере
В моем asp.net приложении нужно задать вопрос пользователю (типа да/нет?) Есть ли какой либо аналог &quot;классического&quot; inputbox,...

Какой в С++ аналог ф-ции InputBox?
Какой в С++ аналог ф-ции InputBox?

кондиционер IDEA ISR18ardn1, необходим аналог
доброго дня, в данном кондее в плате наружного блока пробита оптопара PC851, интересует что можно вместо неё туда поставить, родной найти...

Необходим аналог видеокарте Matrox Helios XA y7157
Добрый день! у нас используются на предприятии данный тип видеокарт! и они отработали достаточно долго,и теперь начинают сыпаться! Эти...

функции InputBox
С помощью функции Input Boxввести произвольное целое число S, с помощью гене-ратора случайных чисел сформировать число W. Вычислить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru