Jeff Gaines Ответов: 2

Доступ к свойствам компонентов в пользовательском элементе управления


Я написал очень простой пользовательский элемент управления на языке C#. Он выглядит как ComboBox, и когда вы нажимаете на выпадающий список, он запускает либо OpenFileDialog, либо FolderBrowserDialog. Когда пользователь выбирает файл или папку, его путь отображается в текстовой части моего элемента управления.
Элемент управления просто имеет кнопку, закрепленную справа, и текстовое поле, закрепленное для заполнения остальной части элемента управления.
Он имеет список изображений с несколькими изображениями, связанными с кнопкой. Обычно, когда вы выбираете изображение в IDE, вы получаете выпадающее меню в окне свойств и можете видеть изображения, что облегчает выбор одного из них.
Я хотел бы, чтобы этот выпадающий список был доступен в моем пользовательском элементе управления, если это возможно. Я могу выставить все свойства кнопки, но не могу найти способ выставить только ImageIndex с хорошим выпадающим списком.
Кто-нибудь может подсказать мне, как этого добиться, пожалуйста?

Что я уже пробовал:

Я исследовал использование "TypeConvertor" и "Editor" в свойствах, но каждый раз, когда я думаю, что приближаюсь, я обнаруживаю, что это не так!

Gerry Schmitz

Не могу сказать, пытаетесь ли вы создать "список изображений" или у вас есть "список изображений", но не можете определить "индекс" ... который не является частью "списка изображений" ... Думаю, это Windows Forms, а не WPF или UWP ...

2 Ответов

Рейтинг:
13

Jeff Gaines

Ладно, решено!
Во-первых, пользовательский элемент управления должен иметь свое собственное свойство ImageList, поэтому я добавил его только с помощью метода доступа "get". Тогда собственность стала:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Browsable(true), Description("The Image Index for the button"), DefaultValue(0)]
[TypeConverter(typeof(ImageIndexConverter))]
[Editor("System.Windows.Forms.Design.ImageIndexEditor", typeof(UITypeEditor))]
[RelatedImageList("ImageList")]
public int ImageIndex
{
	get { return btnPick.ImageIndex; }
	set { btnPick.ImageIndex = value; }
}


Что и требовалось доказать!


Рейтинг:
0

Jeff Gaines

Спасибо, Джерри. Как только я нажал на кнопку, я понял, что пропустил какую-то важную информацию. :-(
У меня есть базовый элемент управления, похожий на ComboBox, и, конечно же, я могу получить доступ ко всем его свойствам. Содержащаяся в нем кнопка имеет связанный с ней список изображений.
Затем у меня есть средство выбора файлов/папок, производное от этого базового элемента управления, и я хочу получить доступ к ImageIndex кнопки в производном элементе управления, используя тот же редактор, который использует сама кнопка. Я добился некоторого прогресса:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
		[Browsable(true), Description("The Image Index for the button"), DefaultValue(0)]
		[System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.ImageIndexConverter))]		
		public int ImageIndex
		{
			get { return btnPick.ImageIndex; }
			set { btnPick.ImageIndex = value; }
		}


Это действительно обеспечивает выпадающий выбор в окне свойств IDE, но он пуст!
Я думаю, что мне нужен атрибут [редактор...], но не знаю, какой из них подходит.


phil.o

Пожалуйста, не приносите больше информации к вашему вопросу, предоставляя решение :)
Вы должны скорее нажать на зеленый виджет "улучшить вопрос", который появляется в нижней части вашего вопроса, когда вы наводите его.