Рейтинг:
5
OriginalGriff
Это не сработает - вы создаете новый экземпляр формы, поэтому вы не получите данные, которые есть в форме, которую вы спрятали, так же как если бы вы положили свой мобильный телефон в бардачок моей машины, вы ожидали бы найти его в бардачке своей машины позже!
Вам нужно использовать экземпляр формы, которую вы спрятали. Как именно, зависит от" отношения " между этими двумя формами.
Взгляните на них, один из них подойдет
Форма, которая создает экземпляр другого:
MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает каких-либо формальных отношений MDI)
Передача информации между двумя формами, Часть 1: Родитель-Ребенок[
^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[
^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[
^]
Цитата:
если я закрою форму, то как я могу получить доступ к этим данным, когда они не были заполнены
Закрытие формы не "убивает" ее или содержащиеся в ней данные - этого не происходит до тех пор, пока форма не будет удалена.
Подумайте об этом: когда вы открываете диалоговое окно файла, вы используете модальное шоу:
OpenFileDialog ofd = new OpenFileDialog()
if (ofd.ShowDialog() == DialogResult.OK)
{
string path = ofd.FileName;
...
}
Поскольку ShowDialog не возвращается до тех пор, пока диалоговое окно не будет закрыто, если бы данные в диалоговом окне были недоступны, вы вообще никогда не смогли бы получить путь к файлу!
То же самое происходит и с вашими формами: закрытие формы ничего не делает с ее данными - она просто освобождает все дескрипторы и другие ресурсы, чтобы их можно было переработать (они являются дефицитными ресурсами в Windows, и "засорять их" - плохая идея).
Таким образом, тот же код работает и с вашей формой:
MyForm mf = new MyForm()
if (mf.ShowDialog() == DialogResult.OK)
{
MyClass data = mf.TheDataINeed;
...
}
[no name]
но я хочу получить данные дочерней формы datagridview в родительскую форму в виде сводки, а не из базы данных.
OriginalGriff
Почему Источник так важен? Это просто DataTable или что - то подобное-дочерняя форма "знает", какая информация требуется, поэтому она предоставляет ее через свойство, когда ее спрашивают.
[no name]
то, что я пытаюсь сделать, - это когда пользователь вводит в текстовое поле дочернюю форму, и когда пользователь нажимает на кнопку(на дочерней форме), дочерняя форма будет скрыта, а родительская форма получит данные datagridview(скажем, datatable), например, сколько строк в datagridview и т. д..
OriginalGriff
И это то, что ссылки, которые я дал вам, показывают, как это сделать: вы создаете свойство в ребенке, которое предоставляет информацию. Если вы только скрываете ребенка, то вы также добавляете событие, которое обрабатывает родитель, и в этом обработчике он обращается к дочернему свойству.
Это звучит сложно, но на самом деле это не так. Посмотрите на Часть 2 - это не сложно!
[no name]
абсолютно идеальный и правильный ответ, Хорошо не использовать публичный модификатор, и это также просто, чем любое другое решение, Спасибо, сэр, как всегда спасибо.
OriginalGriff
Пожалуйста!
[no name]
Я могу послать родителей данных для формирования ребенка в соответствии с частью 2 способ.
OriginalGriff
Нет, вы используете Часть 1!
[no name]
Я хочу после заполнения данных в datagridvew пользователь нажимает на кнопку, и только скрывают, через некоторое время, когда пользователь нажимает на кнопку на родительской форме, что я хочу использовать элемент данных, в настоящее время дочерняя форма открывается, когда пользователь введите значение
Поток данных-это:
От Родителя К Ребенку
От Ребенка К Родителю
Родитель будет использовать дочерние данные datagridview во время события нажатия кнопки
OriginalGriff
Затем сохраните ссылку на форму, когда вы ее откроете, и используйте ее для доступа к свойству.
Или лучше не прятать форму, а закрыть. А потом получить информацию и сохранить ее на потом. "Удержание" формы (со всеми ее оконными дескрипторами и подобными ресурсами) неэффективно только для того, чтобы получить доступ к данным позже в вашем приложении. Таким образом, вы можете использовать ShowDialog вместо Show и "направлять" пользователя, чтобы дать вам необходимую информацию.
[no name]
если я закрою форму, то как я могу получить доступ к этим данным, когда они не были заполнены
OriginalGriff
Ответ обновлен.
[no name]
Извините сэр но я действительно не понимаю как подразумевать этот код или использовать его в моей ситуации
OriginalGriff
Какая часть создает проблемы?
Чем вы сейчас занимаетесь? Какой код вы используете и почему?
[no name]
Form1: хочет получить данные datagridview формы 2 и
Form2: имеет datagridview для получения значений в табличном формате от пользователя
Процесс:
- >Form1 показывает диалог From2, когда пользователь входит в текстовое поле
- и GT; теперь пользователь будет писать manully в datagridview и он/она будет закрыть форму Form2
- и GT; теперь, по прошествии некоторого времени form1 для нужд управления datagridview данные, записанные вручную на форме Form2
OriginalGriff
Так почему же ты не можешь понять, что делать? у вас в значительной степени есть точный код, который вам нужен.
Я не пытаюсь быть раздражающим здесь - Помните, что я не могу видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - просто пытаюсь понять, какая помощь вам нужна, кроме того, что я прыгаю в самолет в течение 12 часов, чтобы посмотреть через ваше плечо и сказать "этот бит". :смеяться:
[no name]
Я знаю, что вы беспокоитесь, но я не знаю, почему я не могу получить вас? я тоже смеюсь с этой стороны над своими глупыми комментариями. извиняюсь
OriginalGriff
Итак, у вас есть код для создания Form2 и его отображения, да?
Копировать-Н-'paste его.
[no name]
у меня есть улучшенный вопрос.
OriginalGriff
OK-ShowDialog-это модальный, или" блокирующий " вызов - он не возвращается до тех пор, пока форма не будет закрыта (не скрыта, закрыта - есть большая разница).
Таким образом, сразу после вызова ShowDialog вы можете использовать свойство в checknonstd через переменную ss для доступа к данным. Все, что вам нужно сделать, это собрать его вместе и вернуть. - Я? Я бы использовал класс для хранения всех трех элементов данных и вернул бы их коллекцию - возможно, список - вместо того, чтобы возиться с тремя отдельными строками.
Но сделай себе пару одолжений:
1) прекратите использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что" TextBox8 " - это номер мобильного телефона сегодня, но когда вам нужно будет изменить его через три недели, вы это сделаете? Используйте описательные имена - например, "tbMobileNo" - и ваш код станет легче читать, более самодокументируемым, более легким в обслуживании-и на удивление быстрее кодировать, потому что Intellisense может добраться до" tbMobile "за три нажатия клавиш, где" TextBox8 " занимает размышление и 8 нажатий клавиш...
2) Если вы считаете, что 50+ текстовых полей в одной форме-это хорошая идея, ваши пользователи будут ненавидеть вас. И у вас также будут проблемы с различными разрешениями экрана... Никогда не ожидайте, что пользователи будут обрабатывать столько данных сразу: разбивать их на отдельные страницы, или вкладки, или что - то еще-но одна форма с таким количеством данных-это Пита для работы.
[no name]
я уважаю вас, сэр, и благодарю за прекрасные предложения, и вы также знаете, что я новичок и у меня нет большого опыта работы с c#(два года).
[no name]
Извините @OriginalGriff Сэр, я снова беспокою вас, как я могу получить данные datagridview, значения которых могут быть более одного за раз.
OriginalGriff
Вот почему я сказал, что буду использовать класс: создайте класс, который содержит один полный набор значений:
public class IHaveNoIdeaWhatTheseAreUsedForSoICantGiveItASensibleName
{
public string Boxes {get; set;}
public string Boxes {get; set;}
public string Boxes {get; set;}
}
и создайте свойство checknonstd, которое возвращает их список.
Геттер свойств создает список и заполняет его из DataGridView; таким образом, элементы управления никогда не отображаются вне формы.
Есть ли в этом смысл?
[no name]
сэр, я обновил свой вопрос и создал значения класса и списка, но когда я закрываю форму, она не сохраняет данные в класс.Пожалуйста, прочтите мой новый код, который я обновил.
OriginalGriff
:вздыхать:
Ты сравнил свой код с моим?
Почему ваш так дико отличается? Я полагаю, вы знаете, как использовать классы , или это придет позже в вашем курсе?
[no name]
я сожалею, что не могу понять, пожалуйста, объясните, если можете
[no name]
Извините, но я получил свое решение по-своему, извините за то, что потратил ваше драгоценное время @OriginalGriff, сэр. Спасибо, что проявили интерес к этому вопросу.
Я навсегда ухожу из проекта кода. Я больше никогда тебя не побеспокою
Я рад обсудить это с вами
OriginalGriff
Не уходи, просто учись! :смеяться:
Если я вас расстроил, то прошу прощения - у меня сегодня очень раздражительное утро...
Посмотрите на свой новый класс и на мой: почему ваш состоит из объектов IList? Вам это не нужно, вам нужен класс, который содержит по одной строке для каждой из отображаемых вами строк. Затем вы добавляете в форму свойство, которое возвращает список экземпляров этого класса.
Имеет ли это смысл до сих пор?
[no name]
нет, сэр, вовсе нет, я уважаю вас, я не дурак, чтобы уйти из-за какого-то глупого вопроса, потому что я хочу выучить правильный c#, а затем попытаться сделать что-то " ".
OriginalGriff
Если вы хотите выучить C#, возьмите книгу - или лучше курс (вы можете задавать вопросы преподавателю, когда не понимаете, что вы не можете сделать с книгой)
Чему вы сейчас учитесь?
[no name]
я никогда не жду от вас, чтобы дать мне код и всегда хочу от любого эксперта правильное направление, чтобы сделать код.
[no name]
я занимаюсь MCA в Университете ИГНОУ, и мой любимый язык-c# , а в extra я также знаю java,php,c, c++(все базовые знания), но я хочу узнать больше c#.
В настоящее время я работаю над ежедневной производственной системой, поэтому задаю весь этот вопрос.
Я думаю, что вижу себя вашим учеником, а вы-учителем , это большой опыт общения с вами
[no name]
Также сделайте мне одолжение: как я могу следить за вами на codeproject я хочу получить ваши последние статьи,чтобы я мог выучить правильный код
OriginalGriff
:смеяться:
Здесь такой системы нет: в настоящее время в бета-версии есть система "Follow", но она этого не делает и почти наверняка не сделает в будущем.
И здесь есть гораздо лучшие авторы, чем я!
[no name]
нет, я не думаю... для меня это только ты