Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание дочернего окна к Form


Автор: maxi91m 14.5.2010, 21:50
У меня есть Form1 где расположен listBox1 и мне теперь нужно по нажатию клавиши Enter создовать дочернее окно где вводить строчку и эта строчка должна вернутся из дочернего окна в Form1 где обработаться функциией.

Собственно как сделать это окошечко что бы по нажатию в нем кнопки или чегото в этом роде возвращалась строчка которую я ввел в TextBox?

 smile 

Автор: diadiavova 14.5.2010, 23:19
Цитата(maxi91m @  14.5.2010,  22:50 Найти цитируемый пост)
Собственно как сделать это окошечко что бы по нажатию в нем кнопки или чегото в этом роде возвращалась строчка которую я ввел в TextBox?

Просто создай в нём свойство, которое будет возвращать этот текст.

Автор: maxi91m 14.5.2010, 23:44
А можно Form2 привязать к элементу Form1, ну так что бы оно высвечивалось чуть ниже выбранной строчки в listBox?
 smile 

Автор: diadiavova 15.5.2010, 00:51
Цитата(maxi91m @  15.5.2010,  00:44 Найти цитируемый пост)
А можно Form2 привязать к элементу Form1, ну так что бы оно высвечивалось чуть ниже выбранной строчки в listBox?

Я не понял вопроса.

Автор: maxi91m 15.5.2010, 01:07
когда я нажимаю на интер то вылетает окошечко и мне бы хотелось что бы оно вылетало чуть ниже выбранной строчки в listbox

Еще почему то мое второе окошечко не реагирует на нажатие клавиш клавиатуры и не перетаскивается мышкой если соит  this->ControlBox = false;
http://ipicture.ru/Gallery/Viewfull/245006.html

Автор: diadiavova 15.5.2010, 01:36
Цитата(maxi91m @  15.5.2010,  02:07 Найти цитируемый пост)
когда я нажимаю на интер то вылетает окошечко и мне бы хотелось что бы оно вылетало чуть ниже выбранной строчки в listbox

У листбокса есть метод GetItemRectangle. Если ему передать индекс выделенного элемента, получишь прямоугольную область относительно которой надо позиционировать окошко. Всё надо перевести в экранные координаты ессно
Код

var rect = listBox1.RectangleToScreen(this.listBox1.GetItemRectangle(listBox1.SelectedIndex));
Полагаю, как указать координаты окна пояснять не надо?

Добавлено через 4 минуты и 31 секунду
Цитата(maxi91m @  15.5.2010,  02:07 Найти цитируемый пост)
Еще почему то мое второе окошечко не реагирует на нажатие клавиш клавиатуры

А как оно должно на них реагировать?
Цитата(maxi91m @  15.5.2010,  02:07 Найти цитируемый пост)
 и не перетаскивается мышкой если соит  this->ControlBox = false;

На сколько я понял из картинки, ты убрал из него как раз ту часть, за которую его можно перетащить. Или я чего-то не понял?

Автор: maxi91m 15.5.2010, 02:39
Ну допустим я хочу что бы моя вторая(дочерняя форма) закрывалась по нажатию Escape 
я пишу в классе Form2

Код

private: System::Void Form2_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {
             if(e->KeyCode == Keys::Escape)
                 this->Close();
         }


В инете я вычитал что типа эта форма не перехватывает значения клавишь, но как же ее заставить это делать.

Автор: diadiavova 15.5.2010, 13:50
Во первых, для этого есть у формы свойство CancelButton(если не ошибаюсь). В дизайнере для этого свойства выбери кнопку, которая закрывает форму и код обработчика этой кнопки будет срабатывать при нажатии эскейпа.
Во вторых, для отлова событий клавиатуры нужно свойству KeyPreview(кажись smile ) присвоить тру.

А вообще, ты напрасно с формой возишься, просто взял бы создал вместо неё контрол и разместил бы над листбоксом, как это обычно делается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)