Лучший отвечающий
Формы vb.net

Вопрос
-
Доброго времени суток, не мог точно определиться с названием темы, за что искренне каюсь. Такой сабж. Есть главное окно, являющееся контейнером mdi. В нем создаются экземпляры формы прототипа (Dim dochernyayaforma as new Form2 к примеру) после она переименовывается, для обеспечения возможности создания еще экземпляров формы прототипа. Ув. знатоки, внимание вопрос:
Как в коде изменить свойства формы\значения переменных\свойства эл. управления если имя экземпляров изменяется по одному и тому же правилу "dochernyayaforma" & i, где i счетчик?
У меня был похожий вопрос по эл. управления. там все решалось через Controls("something" & i).width or etc.
Есть ли подобное решение для форм?
14 апреля 2011 г. 16:27
Ответы
-
Создавая новую форму запихните ее в Dictionary<string, Form>. В последствии к каждому екземпляру формы можно будет обратиться вашим способом.
Не уверен в точности синтаксиса, так как получился смешаный C# + VB :).// запись myDictionary.Add("something" & i, myForm); // обращение myDictionary("something" & i).Width = 10;
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:17
14 апреля 2011 г. 19:20 -
Да так, только вместо Form1 нужно передавать экзмемляр, т.е dochernyayaforma:
myDictionary.Add("something" & i, dochernyayaforma);
Для связи [mail]- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:17
15 апреля 2011 г. 22:02 -
Вы можете к ней обратиться через форму, которая уже в дикшинари. Надо только сделать ее паблик.
Вот для формы, чтобы запихнуть, если имя выставлено раньше:
dochernyayaforma.name="something" & i
myDictionary.Add("something" & i, dochernyayaforma); - то же самое что и myDictionary.Add(dochernyayaforma.name, dochernyayaforma);
В Формс дизайнере укажите модификатор доступа для своей метки как паблик.
Потом сможете к нему достураться как к свойству Width.
И не забудьте отметитить ответы, что вам помогли.
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:18
16 апреля 2011 г. 7:27 -
System.Windows.Forms.Form - родительский класс для вашей конкретной формы. Вам нужно привести тип формы к конкретному типу.
В VB для этого есть динамик каст, но опять таки, как точно выглядить синтаксически будет - не скажу.
В С#:
((MyChildForm)myDictionary("something" & i)).Label1.Text = "something"
Где MyChildForm - конкретный тип формы к которой Вы обращаетесь.
Если все формы одного типа - вы можете создать поменять дикшинари чтобы он не был Dictionary<string, Form>, а был типа Dictionary<string, MyChildForm>
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 19:45
16 апреля 2011 г. 18:26
Все ответы
-
Создавая новую форму запихните ее в Dictionary<string, Form>. В последствии к каждому екземпляру формы можно будет обратиться вашим способом.
Не уверен в точности синтаксиса, так как получился смешаный C# + VB :).// запись myDictionary.Add("something" & i, myForm); // обращение myDictionary("something" & i).Width = 10;
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:17
14 апреля 2011 г. 19:20 -
Ругается на myForm, мол не объявлен, что должно быть на месте ее?15 апреля 2011 г. 2:36
-
Дочерняя форма, т.е. вам предлагают хранить словарь ИмяФормы-СсылкаНаФорму. И потом уже можно будет перебрать этот словарь или обратиться к нужной форме по ключу.
Для связи [mail]15 апреля 2011 г. 7:36 -
Сталкивался с похожей проблемой, ответ нашел где-то на форумах (где не помню, но автору спасибо):
В коде MDI формы:
Public Class MDIParent1 Private m_ChildFormNumber As Integer Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) Handles NewToolStripMenuItem.Click, NewToolStripButton.Click ', NewWindowToolStripMenuItem.Click ' Создать новый экземпляр дочерней формы. Dim ChildForm As New Form1 'System.Windows.Forms.Form ' Сделать ее дочерней для данной формы MDI перед отображением. ChildForm.MdiParent = Me m_ChildFormNumber += 1 ChildForm.Text = "Лист " & m_ChildFormNumber ChildForm.Show() End Sub '.... End Class
А также в проект добавить форму (у меня Form1), которая и будет "создаваться" вызовом ShowNewForm количеством, сколько надо...
Alexandr_Smirnoff- Предложено в качестве ответа Alexandr_Smirnoff 15 апреля 2011 г. 16:16
15 апреля 2011 г. 16:16 -
Александр, спасибо, но это не то.
Мне нужно не создание, а обращение к форме с именем
"something" & i
>Дочерняя форма, т.е. вам предлагают хранить словарь ИмяФормы-СсылкаНаФорму. И потом уже можно будет перебрать этот словарь или обратиться к нужной форме по ключу.
2Дмитрий
Можно ли так:
Dim dochernyayaforma as new Form1
...
dochernyayaforma.name="something" & i
....
myDictionary.Add("something" & i, Form1);
myDictionary("something" & i).Width = 10;?Или там вместо класса должно быть что-то другое?
15 апреля 2011 г. 16:52 -
Да так, только вместо Form1 нужно передавать экзмемляр, т.е dochernyayaforma:
myDictionary.Add("something" & i, dochernyayaforma);
Для связи [mail]- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:17
15 апреля 2011 г. 22:02 -
А то, что мы поменяли имя экземпляра:
dochernyayaforma.name="something" & i
перед этим?
Все равно
myDictionary.Add("something" & i, dochernyayaforma);
???
15 апреля 2011 г. 22:12 -
Еще вопрос: Как можно поменять значение допустим метки расположенной на дочерней форме?
Или и ее тоже нужно добавлять в Dictionary?
15 апреля 2011 г. 22:34 -
Вы можете к ней обратиться через форму, которая уже в дикшинари. Надо только сделать ее паблик.
Вот для формы, чтобы запихнуть, если имя выставлено раньше:
dochernyayaforma.name="something" & i
myDictionary.Add("something" & i, dochernyayaforma); - то же самое что и myDictionary.Add(dochernyayaforma.name, dochernyayaforma);
В Формс дизайнере укажите модификатор доступа для своей метки как паблик.
Потом сможете к нему достураться как к свойству Width.
И не забудьте отметитить ответы, что вам помогли.
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 9:18
16 апреля 2011 г. 7:27 -
При попытке myDictionary("something" & i).Label1.Text = "something" выдает
"Label1" не является членом "System.Windows.Forms.Form".
Label1.Modifiers поменял на Public.
Как изменить зачение Label1.Text конкретного экземпляоа формы?
16 апреля 2011 г. 17:56 -
System.Windows.Forms.Form - родительский класс для вашей конкретной формы. Вам нужно привести тип формы к конкретному типу.
В VB для этого есть динамик каст, но опять таки, как точно выглядить синтаксически будет - не скажу.
В С#:
((MyChildForm)myDictionary("something" & i)).Label1.Text = "something"
Где MyChildForm - конкретный тип формы к которой Вы обращаетесь.
Если все формы одного типа - вы можете создать поменять дикшинари чтобы он не был Dictionary<string, Form>, а был типа Dictionary<string, MyChildForm>
Don't forget to mark the correct answer Blog- Помечено в качестве ответа serjsmolin 16 апреля 2011 г. 19:45
16 апреля 2011 г. 18:26 -
Public Class Main
Public DictOfSynopsis As Dictionary(Of String, TextProcessing)
Dim numberofsynopsis As Byte = 0
Private Sub CreateNewSynopsis()
Dim synopsis As New TextProcessing
DictOfSynopsis.Add(synopsis.Name, synopsis) 'Ругается на эту строчку, мол: Ссылка на объект не указывает на экземпляр объекта. NullReferenceException не обработано.
DictOfSynopsis(synopsis.Name).MdiParent = Me
DictOfSynopsis(synopsis.Name).Text = synopsis.Text & " - " & numberofsynopsis
DictOfSynopsis(synopsis.Name).Show()
DictOfSynopsis(synopsis.Name).Name = "synopsis" & numberofsynopsis
numberofsynopsis += 1
End Sub
Private Sub CreateSynopsisBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CreateSynopsisBtn.Click
CreateNewSynopsis()
End Sub
End ClassПомогите люди добрые, пятый день бьюсь над проблемой =(
Очень срочно нужно. Заранее благодарю!
17 апреля 2011 г. 9:59 -
DictOfSynopsis у вас до момента использования нигде не создаеться (по крайней мере в коде). Вы создаете ссылку вот этой строчкой:
Public DictOfSynopsis As Dictionary(Of String, TextProcessing)
Но нигде не видно у Вас оператора New для создания экземпляра:
http://msdn.microsoft.com/en-us/library/77s47661.aspx#Y100
Don't forget to mark the correct answer Blog17 апреля 2011 г. 10:28 -
Точно! Даже смешно от того, что не заметил и по пустяку полез на форум. Сорри, причина - жуткое переутомление из-за сжатых сроков подготовки проекта %)17 апреля 2011 г. 10:49
-
Да что же это такое =(
Не могу достучаться до массивов в экземплярах форм хотя они все Public
Цикл For i=0 to UBound(Main.DictOfSynopsis("parentsynopsis").arrofa, 1) он даже ни разу не исполняет, просто пропускает его. хотел вывести данные через MessageBox.Show():
MessageBox.Show(UBound(Main.DictOfSynopsis("parentsynopsis").arrofa, 1))
MessageBox.Show(Main.DictOfSynopsis("parentsynopsis").arrofa(0, 2))они не только не отображаются, но и ошибки то и не выводит. Не знаю в чем причина. =(
17 апреля 2011 г. 11:46