Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение списка всех полей формы из контрола / 4 сообщений из 4, страница 1 из 1
06.01.2004, 14:04
    #32369448
Orion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех полей формы из контрола
Пытаюсь получить список полей, мною определённых в форме MyForm,
наследованной от Form из своего контрола SelectExpert, который лежит на форме MyForm.

Как получить из контрола список всех полей MyForm?
Что не делаю, получаю, базовый клас Form и его поля.
Смотрите в DataSourceConverter.GetStandardValues

Свойство из моего контрола:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
[
Category( "Data" ),
TypeConverter(typeof(DataSourceConverter))
]
public object DataSource
{
    get {return mDS;}
    set {}
}


DataSourceConverter:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
internal class DataSourceConverter : StringConverter 
{
	private static StandardValuesCollection defaultRelations = 
		new StandardValuesCollection(
		new string[]{ "(none)" });

	public override bool GetStandardValuesSupported(
		ITypeDescriptorContext context) 
	{
		return true;
	}
	public override bool GetStandardValuesExclusive(
		ITypeDescriptorContext context) 
	{
	// returning false here means the property will
	// have a drop down and a value that can be manually
	// entered.      
		return true;
	}

	public override StandardValuesCollection GetStandardValues(
		ITypeDescriptorContext context) 
	{
//=======================================================	
//=======================================================
//!!!!!!!!!!!!!!!!!!!!!!!!!!  Что здесь не так?
                    FieldInfo[] infos = ((SelectExpert)context.Instance).FindForm().GetType().GetFields);
//=======================================================
//=======================================================
	        string[] srr=new string[]{ "(none)" };

		if(infos!=null)
		{
		     if(infos.Length> 0 )
		     {
		         srr = new string[infos.Length+ 1 ];
 		         srr[ 0 ]=  "(none)" ;
		         for(int i= 0 ;i<infos.Length;i++)
		         {
			srr[i+ 1 ] = infos[i].Name;
		         }
		     }
		     else srr = new string[]{ "(none)" };
		}

		srr = new string[] { "(none)" };
		DataSourceConverter.defaultRelations = new StandardValuesCollection(srr);

		return defaultRelations;
	}

	private bool DSMemberFilter(MemberInfo m, object filterCriteria)
	{		
	return m.GetType().FullName== "System.Data.DataSet"  ? true:false;
	}
 }
...
Рейтинг: 0 / 0
06.01.2004, 16:07
    #32369625
Dronopotamus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех полей формы из контрола
Я бы попробовал получать MemberInfo[] с флагом BindingFlags.Instance, а потом уже смотреть кто из них field
...
Рейтинг: 0 / 0
06.01.2004, 20:07
    #32369797
Orion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех полей формы из контрола
Проблема в том, что я всегда выхожу на родителя, а не на наследника
и соответственно вижу родительские поля, но мне нужен наследник.

Пробовал просто в фоме проделывать - работает (во время работы самого приложения), а из контрола нет и отладкой не воспользуешься т.к. приложение ещё не запущено (т.к. работаешь в редакторе формы со свойствами контрола)

Вообще я пытаюсь сделать что-то подобное DataSource как у DataGrid,
может кто подскажет другой способ.
...
Рейтинг: 0 / 0
12.02.2004, 23:37
    #32407884
ILF80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение списка всех полей формы из контрола
Вы все правильно делаете, и это будет работать в рантайме...

Дядька Билли как всегда хотел как лучше :)
Когда он показывает форму в дизайнере, то создается форма от класса System.Windows.Form (не Form1, Form2 или MegaForm), парсится исходник и ищется метод InitializeComponents , по которому (+resx файл) накидываются контролы именно на его форму. Видимо это нужно для того, чтобы быть уверенным в работоспособности кода формы.
Именно поэтому он умеет игнорировать конструктор и синтаксические\алгоритмические и т.д. ошибки в тексте cs файла формы.

По этой причине вы видите не предка вашей формы, а его собственную, внедрях созданную форму..

Кстати, это относится и к UserControlam... и это одна из причин пропадания контролов с формы..
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение списка всех полей формы из контрола / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]