Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/67: Рейтинг темы: голосов - 67, средняя оценка - 5.00
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39

Обмен данными между формами

23.04.2012, 16:25. Показов 13694. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю в Visual Studio 2008, приложение Windows Forms.
Есть две формы (Form1 и Form2). На Form2 есть элемент listBox1. При каком-либо событии нужно поменять номер выделенного элемента (я так понимаю это свойство listBox1.SelectedIndex).
Сколько ни пробовал: либо ошибки, либо нулевой результат. Подскажите как это можно решить или подкиньте ссылочку. Буду очень благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2012, 16:25
Ответы с готовыми решениями:

Обмен данными между формами
Здравствуйте! Пишу в VS 2012. Есть две формы, по выборе чекбокса открывается вторая форма. Во второй форме в ричтекстбоксе код выполняемой...

Обмен данными между формами
форма родитель имеет кнопку, при нажатии на которую создаётся ребёнок. у ребёнка есть picturebox и textbox. родитель передаёт ссылку на...

Обмен данными между формами
Задача следующая. Нужно чтобы в форме Form2 был доступ к данным, созданным в классе stroka из формы Form1 (иными словами – обеспечить...

14
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
23.04.2012, 16:38
Причём тут две формы?

listBox1.SelectedIndex - Индекс текущего выделенного элемента (индексация ведется с нуля). Чтобы поменять текущий выделенный элемент назначьте индекс в допустимых пределах.
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
23.04.2012, 16:39  [ТС]
Простите, условие написал криво - нужно изменить индекс из Form1
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.04.2012, 17:09
Цитата Сообщение от foxyboy Посмотреть сообщение
Простите, условие написал криво - нужно изменить индекс из Form1
Дело вообще не в конкретном контролле, свойстве или методе второй формы. По-этому на счёт "криво" это Вы поскромничали.
Посмотрите здесь - это заголовочная часть раздела:
Ответы на 7 самых частых вопросов по WinForms
Хотя язык в котором Вы работаете имеет значение.
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
27.04.2012, 00:18  [ТС]
listBox1 заполнялся динамически... из-за этого все проблемы были))
Теперь другой вопрос:
Как при нажатии по кнопке на Form1 обновить содержание listBox1 на уже открытой ранее Form2?)
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.04.2012, 00:22
Цитата Сообщение от foxyboy Посмотреть сообщение
Теперь другой вопрос
Ты смотрел ссылку, которую тебе IGPIGP дал?
1
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
27.04.2012, 18:59  [ТС]
Да..
На Form1 такой код:
C#
1
2
3
4
5
6
7
private void button6_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.List();//формирует коллекцию listBox1.
            f2.Data = selected;//selected - интовая переменная, думаю, это не так важно.
            f2.Show();
         }
Код на Form2:
C#
1
2
3
4
5
public int Data
        {
            get { return listBox1.SelectedIndex; }
            set { listBox1.SelectedIndex = value; }
        }
Я понимаю, что таким образом каждый раз новое окно формируется... но хочу менять содержимое (выделение) в уже существующем...
Вы, наверное, часто это слышите как оправдание, но я только учусь... В ссылке не нашел то, что мне нужно. Хотя, скорее всего, просто не все понял)
Если не тяжело, можете еще раз подсказать...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.04.2012, 19:11
Цитата Сообщение от foxyboy Посмотреть сообщение
C#
1
2
3
4
Form2 f2 = new Form2();
f2.List();//формирует коллекцию listBox1.
f2.Data = selected;//selected - интовая переменная, думаю, это не так важно. 
f2.Show();
Я не знаю С#, по-этому поверю на слово, что listBox1 Вы таким образом создали на f2,
Тогда что мешает:
C#
1
2
3
4
f2.List();//формирует коллекцию listBox1.
f2.Data = selected;//selected - интовая переменная, думаю, это не так важно. 
f2.listBox1.SelectedIndex=5;
f2.Show();
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
27.04.2012, 22:48  [ТС]
listBox1 заранее создан, предыдущим кодом я лишь заполнял его данными и показывал форму.
C#
1
f2.listBox1.SelectedIndex=5;
На сколько знаю, так невозможно ничего добиться)
Да и вопрос состоял в обновлении формы а не передаче данных)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.04.2012, 23:11
Цитата Сообщение от foxyboy Посмотреть сообщение
На сколько знаю, так невозможно ничего добиться)
А Вы попробовали? Только поставьте индекс из тех что есть реально т.к. 5 это 6-й (от нуля ж индексирование).
Цитата Сообщение от foxyboy Посмотреть сообщение
обновлении формы а не передаче данных)
Обновление формы это redaw refresh или update? Вы хотите меня запутать. Свойство Selected контрола это свойство, т.е. переменная. Вам её надо установить из одной формы в другой форме. Это похоже на передачу данных:
Ответы на 7 самых частых вопросов по WinForms
Но перед этим о видимости и области действия имен. Потому как если создали экземпляр класса:
C#
1
Form2 f2 = new Form2();
а доступ получить не можете:
C#
1
f2.listBox1.SelectedIndex=1;
то или из другой локации это пытаетесь сделать (там не видно f2), либо не знаю, что и сказать.)
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
27.04.2012, 23:49  [ТС]
С изменением индекса я уже решил вопрос.
Меня просто интересует, как обновить форму или listBox, так как изменение индекса "прорисовывается" после обновления оных))
Далее.
C#
1
2
3
4
5
            selected++;
            Form2 f2 = new Form2();
            f2.List();
            f2.listBox1.SelectedIndex = 2;
            f2.Show();
"Недоступен из-за его уровня защиты" - но меня это мало волнует)
Так что поможете с обновлением?)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.04.2012, 01:24
Цитата Сообщение от foxyboy Посмотреть сообщение
Меня просто интересует, как обновить форму или listBox, так как изменение индекса "прорисовывается" после обновления оных))
Просто неимоверно. Неужели в С# нужно чего-то апдейтить? В с++\cli контрол реагирует сразу.
Цитата Сообщение от foxyboy Посмотреть сообщение
"Недоступен из-за его уровня защиты"
Мне кажется в его или не создали правильно. Либо не добавили в форму. Покажите, всё таки где и как этот listBox создан и добавлен. Еще вот что легко сделать всегда, если упёрся:
C#
1
2
3
4
5
Form2 f2 = new Form2();
            f2.List();
            f2.listBox1.SelectedIndex = 2;
MessageBox.Show(f2.listBox1.SelectedIndex.ToString());
            f2.Show();
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
28.04.2012, 15:34  [ТС]
listBox1 заранее добавлен на Form2. В коде самой Form2 он лишь заполняется значениями из текстового файла.
Давайте еще раз проблему опишу:
  • Есть две формы Form1 и Form2
  • на Form2 есть listBox1 (заранее создан)
  • на Form1 есть две кнопки (button1 и button2)
  • При нажатии на button1 открывается Form2 (Show)
  • При нажатии на button2 нужно изменить свойство listBox1 (selectedIndex), в ранее открытой Form2
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.04.2012, 16:11
Цитата Сообщение от foxyboy Посмотреть сообщение
При нажатии на button1 открывается Form2 (Show)
При нажатии на button2 нужно изменить свойство listBox1 (selectedIndex), в ранее открытой Form2
Вы не прочли вот это:
Цитата Сообщение от IGPIGP Посмотреть сообщение
то или из другой локации это пытаетесь сделать
Смотрите, Вы создали экземпляр Form2 с именем f2 локально, в функции-обработчмке события и хотите иметь к нему доступ из другой функции. Это не получится ни с какой локальной переменной. И это главное. Теперь Вам стало ясно, что если Вы объявите Ваш экземпляр класса Form2 в классе Form1 то тогда сможете к нему обратится из любого метода Form1:
После тела деструктора `Form1(){}напишите:
C#
1
Form2 f2=new Form2();
а в "кнопке button1":
C#
1
f2.Show();
а в "кнопке button2":
C#
1
f2.listBox1.SelectedIndex = 2;
Если бы сразу написали так как в конце, было бы легче.
0
33 / 20 / 13
Регистрация: 08.06.2011
Сообщений: 39
05.05.2012, 21:24  [ТС]
Все так просто оказалось)) спасибо Вам большое)
Топик клацать можно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2012, 21:24
Помогаю со студенческими работами здесь

Обмен данными между формами
Есть две формы , допустим Form1 и Form2. В Form1 есть класс MyClass1, объект которого создается там же. Нужно в Form2 изменить значения...

Обмен данными между формами
Всем привет Имеется 2 открытые формы, необходимо при клике передать данный с 2 формы на 1, без переоткрытия (из тексБокса в текстБокс) ...

Обмен данными между формами в MDI
есть форма перент - Form1 она создала 2 формы child: Form2, Form3. соответственно в Form1 они прописаны: public Form2 form2; ...

Обмен данными между двумя формами
У меня есть две формы и нужно передать данные от одной формы к другой. Вот код: /* Форма 1 */ public object charInfo; public...

Обмен между формами из разных проектов
Прочитал здесь на форуме вот такой способ. Скажите что делать, если Form1 и Form2 находятся в разных проектах. Допустим в Проекте1 я указал...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru