Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> textbox создает checkbox 
V
    Опции темы
blackwitcher
Дата 15.6.2015, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



всем привет, я не знаю как сделать, чтобы в textbox когда вводишь какой-то текст при нажатии Enter создавался checkbox, а введенное слово в textbox исчезало и появлялось в checkbox smile 

Всем спасобо
PM MAIL   Вверх
infarch
Дата 16.6.2015, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Я бы сказал что вы не совсем правильно подошли к делу. Даже с точки зрения архитектуры, текстбокс служит для ввода текста, а не для создания контролов. Опять же, может оказаться что пользователю удобнее кликнуть по кнопке, а не давить ентер в тексбоксе.

Поэтому я бы сделал так: радом с тексбоксом ставим кнопку "Создать". В ее обработчике выполняем нужные действия по созданию чекбокса и очищаем введенный текст. А в свойствах формы задаем пропертю AcceptButton, указав эту кнопку. Результат достигнут: энтер запускает хендлер кнопки, мышкой тоже можно тыцнуть. Все счастливы.
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



спасибо, сейчас сделаю smile 

Это сообщение отредактировал(а) blackwitcher - 16.6.2015, 13:37
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Код

private void button3_Click(object sender, EventArgs e)
        {
            var checkbox = new CheckBox();
            checkbox.Text = textBox3.Text;
            this.Controls.Add(checkbox);
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            if (textBox3.Text.Length == 0) button3.Enabled = false;
            else button3.Enabled = true;
        }



а как сделать n количество checkBox? smile 
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Код

private void button3_Click(object sender, EventArgs e)
        {
            checkbox = new CheckBox[size];
            for (int i = 0; i < checkbox.Length; i++)
            {
                checkbox[i] = new CheckBox();
                checkbox[i].Text = textBox3.Text;
                this.Controls.Add(checkbox[i]);
            }
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            if (textBox3.Text.Length == 0) button3.Enabled = false;
            else button3.Enabled = true;
        }


так не работает smile 
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Код

public partial class subtask : Form
{
        public subtask()
        {
            InitializeComponent();
        }
        int i = 0;
        Point location = new Point(0, 0);
}
private void button3_Click(object sender, EventArgs e)
        {
            CheckBox checkbox = new CheckBox();
            checkbox.Name = "" + i.ToString();
            checkbox.Text = textBox3.Text;
            checkbox.Size = new System.Drawing.Size(51, 51);
            checkbox.Left = location.X;
            checkbox.Top = location.Y;
            checkbox.UseVisualStyleBackColor = true;
            panel1.Controls.Add(checkbox);

            i++;
            location = new Point(location.X, location.Y + checkbox.Height);
        }


Уже может быть smile , но не полностью показывается текст в checkbox : smile 
 smile 

Это сообщение отредактировал(а) blackwitcher - 16.6.2015, 16:22
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Код

checkbox.AutoSize = true;

 smile 
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



А как очищаем введенный текст в TextBox после нажатии button?
 smile 
PM MAIL   Вверх
blackwitcher
Дата 16.6.2015, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Сделал, ура  smile  smile 

Код

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 test02
{
   public partial class subtask : Form
    {
       public CheckBox[] checkbox;

        public subtask()
        {
            InitializeComponent();
        }
        int i = 0;
        Point location = new Point(0, 0);
        private void subtask_Load(object sender, EventArgs e)
        {
            button3.Enabled = false;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            CheckBox checkbox = new CheckBox();
            checkbox.AutoSize = true;
            checkbox.Name = "" + i.ToString();
            checkbox.Text = textBox3.Text;
            checkbox.Size = new System.Drawing.Size(51, 51);
            checkbox.Left = location.X;
            checkbox.Top = location.Y;
            checkbox.UseVisualStyleBackColor = true;
            panel1.Controls.Add(checkbox);
            i++;
            location = new Point(location.X, location.Y + checkbox.Height);

            foreach (Control text in this.Controls)
            {
                if (text.GetType() == typeof(TextBox))
                    text.Text = string.Empty;
            }

        }


        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            if (textBox3.Text.Length == 0) button3.Enabled = false;
            else button3.Enabled = true;
        }
    }
}



Если кому-то будет нужно smile 


Цитата

infarch, спасибо за подсказку

PM MAIL   Вверх
infarch
Дата 17.6.2015, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Рад за вас ) Вот только несколько уточнений есть.

Стоит ли вычислять координаты каждого чекбокса? Оно конечно выглядит красиво, но что будет если один в середине будет удален? А как будет работать ресайз формы? Я бы использовал контейнер который умеет располагать контролы, например FlowLayoutPanel, ну или даже свой контейнер сделать.

Второе:
checkbox.Text = textBox3.Text;
Вы знаете имя текстбокса и обращаетесь к нему напрямую. В таком слечае, зачем для очистки перебор?
Код

foreach (Control text in this.Controls)
{
    if (text.GetType() == typeof(TextBox))
       text.Text = string.Empty;
}

Так вы вообще все текстбоксы на форме очистите. Не лучше ли просто по имени textBox3.Text = String.Empty

Наконец, немного занудства ) Вы явно делаете нечто сложнее обычного HelloWorld. Не подумать ли о MVP?

Это сообщение отредактировал(а) infarch - 17.6.2015, 10:12
PM MAIL   Вверх
blackwitcher
Дата 17.6.2015, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Цитата

Наконец, немного занудства ) Вы явно делаете нечто сложнее обычного HelloWorld. Не подумать ли о MVP?

 smile 

Хороший вопрос, smile  я только 2 месяц, как сам изучаю C#, было бы не плохо попробовать. Может у Вас есть какие-то советы? smile 
PM MAIL   Вверх
infarch
Дата 17.6.2015, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: нет
Всего: 1



Совет: почитать про MVP, попробовать задействовать, оценить плюсы и минусы...
PM MAIL   Вверх
blackwitcher
Дата 17.6.2015, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Спасибо, infarch за совет, почитаем smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1420 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.