#c#
#c#
Вопрос:
У меня есть приложение Windows form на c #, которое имеет функциональность, аналогичную графическому интерфейсу MSN. Это работает таким образом, что появляется только окно уведомлений, если есть уведомление, которое в этом случае я поместил несколько кнопок и других элементов в одну панель. (это правильный способ сделать это?)
Как мне закодировать его так, чтобы я мог использовать ArrayList для добавления похожих панелей в список и использовать цикл for для его вызова. Примером может быть вызов 2 или 3 похожих панелей с помощью arraylist(?) и чтобы они отображались друг под другом. (Может быть, например, как окно уведомлений MSN появляется одно над другим.)
код для панели
this.panel1.Controls.Add(this.button1);
this.panel1.Controls.Add(this.lblImage);
this.panel1.Controls.Add(this.lblName);
this.panel1.Controls.Add(this.lblLinkName);
this.panel1.Controls.Add(this.lblLinkLocation);
this.panel1.Controls.Add(this.lblLocation);
this.panel1.Location = new System.Drawing.Point(13, 134);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(506, 100);
this.panel1.TabIndex = 17;
должен ли я кодировать цикл for в файле конструктора или файле кодирования? поскольку после того, как я попытался добавить цикл for в файл кода конструктора, представление конструктора не смогло отобразить мой пользовательский интерфейс.
Комментарии:
1. Можете ли вы предоставить дополнительные разъяснения? Есть ли какая-нибудь примерная ссылка, которую вы хотите создать?
2. Вы просто пытаетесь добавить несколько панелей, все с одинаковыми кнопками, метками и размером, но с разными местоположениями и индексами вкладок?
3. @дэрил: да, это то, что я пытаюсь сделать. все аналогично, но в другом месте.
4. Это то, для чего был создан UserControl.
Ответ №1:
Я предполагаю, что это то, что вы ищете
for(int i = 0; i < panels.length; i ){
AddPanel(panels[i], i);
}
AddPanel(System.Drawing.Point point, int tabIndex){
Panel panel = new Panel();
this.Add(panel);
panel.Controls.Add(new Button());
panel.Controls.Add(new Label("Image"));
panel.Controls.Add(new Label("Name"));
panel.Controls.Add(new Label("linkName"));
panel.Controls.Add(new Label("linkLocation"));
panel.Controls.Add(new Label("location"));
panel.Location = point;
panel.Name = "panel" i.ToString();
panel.Size = new System.Drawing.Size(506, 100);
panel.TabIndex = tabIndex;
}
Вам нужно будет заполнить массив panels точками, в которые вы хотели бы добавить свои панели.
Комментарии:
1. привет. спасибо за ответ. как мне указать точку, в которой они должны быть добавлены для разных панелей?
2. и все эти коды должны быть помещены в файл конструктора или файл cs?
3. @Thomas Просто создайте свой массив и добавьте свои точки, в которых вы хотите, чтобы ваши панели отображались… Point[] panels = new Point[] { новая точка (0, 0), новая точка (100, 0), новая точка (0, 100), новая точка (100, 100)}; Не помещайте его в файл конструктора, потому что VS удалит его, или он будетотключите редактор. Он отправляется в файл form.cs после метода InitializeComponents().
Ответ №2:
Я бы создал пользовательский элемент управления, который имеет интерфейс, который вы хотите для каждого элемента. Пусть элемент управления предоставляет свойства, методы и события, которые позволяют вам постоянно получать доступ к дочерним элементам управления.
Вы можете создать несколько экземпляров пользовательского элемента управления и добавить их в список, а также прикрепить к ним обработчики событий и т.д…
Если вы используете панель компоновки потока в качестве родительской и добавляете к ней каждый экземпляр пользовательского элемента управления, он автоматически обработает макет для вас без необходимости их позиционирования вручную. Если макет потока находится внутри контейнера с установленным автозапуском, у вас будет хороший прокручиваемый список любых элементов, которые вы можете придумать.
добавление примера
С помощью пользовательского элемента управления ListItem.
ListItem item = new ListItem();
someFlowPanel.controls.add(item);
Вероятно, вам следует установить ширину элемента на ширину панели потока, к которой вы его добавляете, и установить для нее привязку влево и вправо.
Комментарии:
1. привет, спасибо за ответ. как мне добавить к нему каждый экземпляр пользовательского элемента управления? означает ли это, что я могу добавить несколько панелей похожих меток кнопок и кнопок на панель компоновки потока?
2. Если вы сгруппируете все свои элементы управления, которые хотите повторить для каждого элемента, в пользовательском элементе управления, вы можете обрабатывать их все как один сгруппированный элемент. У вас может быть столько экземпляров вашего пользовательского элемента управления, сколько вам нравится.
3. привет, я полагаю, что все это должно быть закодировано в файле конструктора или в файле cs?
4. Пользовательский элемент управления можно редактировать в конструкторе. Код для создания его экземпляров и добавления его на панель должен быть в вашем файле кода для любой формы, в которую вы хотите добавить панели.