Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 20:52   #1
samouelson
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 46
По умолчанию Взаимодействие элементов управления в 2-х формах

Доброго времени суток всем! Не могу решить следующую задачу.
Исходные данные:
Имеется форма №1 (главная форма) с textbox-ом, имеется форма №2 с DataGridView. Форма №2 реализована в виде Docking панели при помощи Krypton-а.
Задача:
Занести все встречающиеся символы в DataGridView, то есть новый встретившийся символ в новую ячейку. (Так к сведению, задача решается для того чтобы затем определить частоту встречающихся символов).
Заранее благодарен!
samouelson вне форума Ответить с цитированием
Старый 29.09.2011, 23:05   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

М...думаю, что тут надо сначала сформировать частотный словарь, потом кинуть его в datasource DataGridView. С Krypton не работал, но думаю, что все это не сложнее DevExpress. Итого: Формируем частотный словарь (реализация может быть разной(Tuple,свой класс, пробег по строке(сравнивая первый символ.Если встретили, удаляем, увеличиваем счетчик, потом заносим в Dictionary<char,int>).
Сформировав словарь, кидаем в источник данных, предварительно преобразовав. Как это сделать? Все зависит от реализации словаря.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 29.09.2011, 23:20   #3
samouelson
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 46
По умолчанию Уточнения

Спасибо. Но речь идет о передаче данных из TextBox (контрол принадлежит Form) в DataGridView (принадлежит UserControl). Вот то что я пытаюсь сделать.

Спасиба.
samouelson вне форума Ответить с цитированием
Старый 29.09.2011, 23:46   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Контролы всего-лишь отображают информацию и позволяют её вводить. Никакой логики они нести не должны.
Ввели текст в TextBox -> вызвалась функция, которая определяет какие символы и с какой частотой встречаются -> результат работы функции заполняется в коллекцию -> Коллекция биндится (Binding) к DataGridView. В итоге текстбокс ничего не знает о гриде и наоборот.
pu4koff вне форума Ответить с цитированием
Старый 30.09.2011, 10:47   #5
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Можно сделать у второй формы метод ShowTextLetter(string text); - он должен обработать текст и вывести символы в DataGridView. Данный метод можно вызывать из обработчика события TextBox.TextChanged.
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Старый 06.10.2011, 02:50   #6
samouelson
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 46
По умолчанию

Спасибо Руслантусу за дельный совет. Реализовать получилось, но не совсем так как хотелось бы.
UserControl1
Код:
 static string letter;
        public static void ShowTextLetter(string te)
        {
            letter = te;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            kryptonDataGridView1.Rows.Add(letter);
        }
Form1
Код:
 private void TBCT1_TextChanged(object sender, EventArgs e)
        {
            KryptonToolStripFormProject1.UserControl1.ShowTextLetter(TBCT1.Text);
        }
Здесь все работает.
UserControl1
Код:
public void ShowTextLetter(string te)
        {
            kryptonDataGridView1.Rows.Add(te);
        }
Form1
Код:
            private void TBCT1_TextChanged(object sender, EventArgs e)
        {
            KryptonToolStripFormProject1.UserControl1 f = new UserControl1();
            f.ShowTextLetter(TBCT1.Text);
        } 
        }
Ошибок не выдает однако таблица не заполняется. Вернее заполняется пустыми значениями. Что не так?
Спасиба.

Последний раз редактировалось samouelson; 06.10.2011 в 03:07.
samouelson вне форума Ответить с цитированием
Старый 06.10.2011, 08:29   #7
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Во-первых, метод ShowTextLetter должен сразу отображать буквы текста, то есть, первый вариант не правильный.
Во-вторых, зачем вы каждый раз создаёте элемент управления:
Код:
KryptonToolStripFormProject1.UserControl1 f = new UserControl1();
f.ShowTextLetter(TBCT1.Text);
Здесь правильно:
Код:
private void TBCT1_TextChanged(object sender, EventArgs e)
{
    KryptonToolStripFormProject1.UserControl1.ShowTextLetter(TBCT1.Text);
}
А далее, в методе ShowTextLetter, нужно пройтись по всем буквам и добавить их в таблицу, но, ещё нужно не забыть стереть её перед этим, так как текст изменился.
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Старый 06.10.2011, 17:32   #8
samouelson
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 46
По умолчанию

Если делать так как вы имеете ввиду Руслантус, то вылазит ошибка Для нестатического поля, метода или свойства "KryptonToolStripFormProject1.UserC ontrol1.ShowTextLetter(string)" требуется ссылка на объект. А Вашу мыслю я реализую следующим образом:
Код:
Form1
private void TBCT1_TextChanged(object sender, EventArgs e)
        {                        
            UserControl1.ShowTextLetter(TBCT1.Text);
        }
UserControl1
public void ShowTextLetter(string te)
        {
            kryptonDataGridView1.Rows.Add(te);
        }
Вот эту злополучную ссылку я никак не могу реализовать. Подскажите пожалуйста как решить данную проблемку.
samouelson вне форума Ответить с цитированием
Старый 06.10.2011, 18:11   #9
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Вам же нужна ссылка на экземпляр класса данного элемента управления.
Код:
UserControl userControl1 = new UserControl(...);
...
userControl1.ShowTextLetter(...);
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Старый 11.10.2011, 01:13   #10
samouelson
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 46
По умолчанию

Проблема в том, что я не могу получить из Form1 доступ к элементам управления (к тому же DataGridView), находящимся на UserControl. Запрашивает ссылку на объект. Как это сделать? Спасибо.
samouelson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержимое элементов управления sr.Meskalito Microsoft Office Word 0 23.03.2011 11:49
Массив элементов управления Рик Общие вопросы Delphi 6 03.03.2011 20:30
проблема использования элементов управления в word sirius_ltd Microsoft Office Word 2 30.09.2010 17:51
Динамическое расположение элементов управления Rodion Microsoft Office Excel 1 27.04.2010 13:19
Использование элементов управления akd2009 Microsoft Office Excel 2 30.10.2009 19:55