Разрабатываю UserControl для контекстного поиска в датагридах, все зашибись, но попутался в динамических свойствах.
Трабла в том, что не получается создать динамическую ссылку на датагрид для нового экземпляза UserControl.
Если кто-то шарит — поясните...
Спасибо!
Re: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Доброго времени суток!
A>Разрабатываю UserControl для контекстного поиска в датагридах, все зашибись, но попутался в динамических свойствах. A>Трабла в том, что не получается создать динамическую ссылку на датагрид для нового экземпляза UserControl.
Вы думаете что ваш вопрос понятен?
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[2]: C# UserControl динамические свойства контрола?
Здравствуйте, AlexNek, Вы писали:
AN>Вы думаете что ваш вопрос понятен?
Поясняю, есть мной разработанный UserControl, который должен взаимодействовать с датагридами на различных формах.
При том, мой UserControl должен хранить переменные и ссылку на датагрид для каждого экземпляра окна.
Для передачи параметров (ссылки на датагрид) в UserControl я предусмотрел класс.
Проблема в том, что каждый новый экземпляр UserControl-а перезаписывает переменные и ссылку на датагрид.
Это является недопустимым при одновременном использовании UserControl-а на двух и более формах.
Спасибо!
Re[3]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, AlexNek, Вы писали:
AN>>Вы думаете что ваш вопрос понятен?
A>Поясняю, есть мной разработанный UserControl, который должен взаимодействовать с датагридами на различных формах. A>При том, мой UserControl должен хранить переменные и ссылку на датагрид для каждого экземпляра окна. A>Для передачи параметров (ссылки на датагрид) в UserControl я предусмотрел класс. A>Проблема в том, что каждый новый экземпляр UserControl-а перезаписывает переменные и ссылку на датагрид. A>Это является недопустимым при одновременном использовании UserControl-а на двух и более формах.
Немного яснее, но непонято зачем нужен именно контрол. Сделайте проперти и поставьте вреакпоинт на сеттер. Увидите кто переписывает данные
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[4]: C# UserControl динамические свойства контрола?
AN>Немного яснее, но непонято зачем нужен именно контрол. Сделайте проперти и поставьте вреакпоинт на сеттер. Увидите кто переписывает данные
Без одельного контрола не обойтись, это адвансед поиск по датагриду т.е. доп. окно для настроек и т.д...
Кто перезаписывает данные и так ясно — это каждый новый экземпляр моего контрола в новом окне.
Вопрос как сделать каждый новый экземпляр контрола со своими локальными переменными и ссылками на датагрид..?
Re[5]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
AN>>Немного яснее, но непонято зачем нужен именно контрол. Сделайте проперти и поставьте вреакпоинт на сеттер. Увидите кто переписывает данные
A>Без одельного контрола не обойтись, это адвансед поиск по датагриду т.е. доп. окно для настроек и т.д...
Что видно сразу и всегда в этом контроле? A>Кто перезаписывает данные и так ясно — это каждый новый экземпляр моего контрола в новом окне. A>Вопрос как сделать каждый новый экземпляр контрола со своими локальными переменными и ссылками на датагрид..?
При создании класса будут новые переменные, а ссылку на дату грид надо ставить в родительском окне
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[6]: C# UserControl динамические свойства контрола?
Здравствуйте, AlexNek, Вы писали:
A>>Без одельного контрола не обойтись, это адвансед поиск по датагриду т.е. доп. окно для настроек и т.д... AN>Что видно сразу и всегда в этом контроле?
ТекстБокс для ввода искомого слова + 4 кнопки для управления поиском.
A>>Кто перезаписывает данные и так ясно — это каждый новый экземпляр моего контрола в новом окне. A>>Вопрос как сделать каждый новый экземпляр контрола со своими локальными переменными и ссылками на датагрид..? AN>При создании класса будут новые переменные, а ссылку на дату грид надо ставить в родительском окне
Сыылка на датагрид естественно ставится из родительского окна через класс.
Но так получается, что ссылка на датагрид применяется ко всем экземплярам моего контрола.
А должна быть для каждого своя.
Re[7]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, AlexNek, Вы писали:
A>>>Без одельного контрола не обойтись, это адвансед поиск по датагриду т.е. доп. окно для настроек и т.д... AN>>Что видно сразу и всегда в этом контроле? A>ТекстБокс для ввода искомого слова + 4 кнопки для управления поиском.
Ну тогда контрол.
A>>>Кто перезаписывает данные и так ясно — это каждый новый экземпляр моего контрола в новом окне. A>>>Вопрос как сделать каждый новый экземпляр контрола со своими локальными переменными и ссылками на датагрид..? AN>>При создании класса будут новые переменные, а ссылку на дату грид надо ставить в родительском окне A>Сыылка на датагрид естественно ставится из родительского окна через класс. A>Но так получается, что ссылка на датагрид применяется ко всем экземплярам моего контрола. A>А должна быть для каждого своя.
Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[8]: C# UserControl динамические свойства контрола?
Здравствуйте, AlexNek, Вы писали:
AN>Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете
использую, public static DataGridView dgv = new DataGridView();
в этом и трабла, а иначе как?
Re[9]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, AlexNek, Вы писали:
AN>>Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете A>использую, public static DataGridView dgv = new DataGridView(); A>в этом и трабла, а иначе как?
Необязательно, но назначение этой строки не ясно
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[10]: C# UserControl динамические свойства контрола?
Здравствуйте, AlexNek, Вы писали:
AN>>>Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете A>>использую, public static DataGridView dgv = new DataGridView(); A>>в этом и трабла, а иначе как? AN>Необязательно, но назначение этой строки не ясно
Мой юзерконтрол
---------------
public partial class UserControl1 : UserControl
{
public static DataGridView dgv = new DataGridView();
public UserControl1()
{
InitializeComponent();
}
}
public class search
{
public void setDataGridView(DataGridView datagrid)
{
UserControl1.dgv = datagrid; // инизиализация датагрида для юзерконтрола
}
}
Re[11]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, AlexNek, Вы писали:
AN>>>>Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете A>>>использую, public static DataGridView dgv = new DataGridView(); A>>>в этом и трабла, а иначе как? AN>>Необязательно, но назначение этой строки не ясно
A>Мой юзерконтрол A>---------------
A> public partial class UserControl1 : UserControl A> { A> public static DataGridView dgv = new DataGridView();
A> public UserControl1() A> { A> InitializeComponent(); A> } A> }
A> public class search A> { A> public void setDataGridView(DataGridView datagrid) A> { A> UserControl1.dgv = datagrid; // инизиализация датагрида для юзерконтрола A> } A> }
Непонятно зачем вы здесь используете static поле. Очевидно, что для всех экземпляров вашего класса будет одна и та же ссылка в памяти для этого свойства. Уберите static и все будет хорошо.
Re[12]: C# UserControl динамические свойства контрола?
Здравствуйте, joher, Вы писали:
J>Непонятно зачем вы здесь используете static поле. Очевидно, что для всех экземпляров вашего класса будет одна и та же ссылка в памяти для этого свойства. Уберите static и все будет хорошо.
Без поля static вообще не работает, ругается — Error 1 An object reference is required for the non-static field, method, or property
Re[11]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
A>Здравствуйте, AlexNek, Вы писали:
AN>>>>Попробуйте сделать тестовый проектик и выставить его куда нибудь. Статик нигде не пользуете A>>>использую, public static DataGridView dgv = new DataGridView(); A>>>в этом и трабла, а иначе как? AN>>Необязательно, но назначение этой строки не ясно
A>Мой юзерконтрол A>---------------
A> public partial class UserControl1 : UserControl A> { A> public static DataGridView dgv = new DataGridView();
A> public UserControl1() A> { A> InitializeComponent(); A> } A> }
A> public class search A> { A> public void setDataGridView(DataGridView datagrid) A> { A> UserControl1.dgv = datagrid; // инизиализация датагрида для юзерконтрола A> } A> }
По крайней мере, у вас три логических ошибки и катастрофическое нарушение правил (А).
А. Запрешен прямой публик доступ к данным класса, особенно статическим. Для этого существует синглетон и проперти.
1. Если контрол должен работать в паре с гридом, то это подразумевает отсутствие общих (статических) полей. Обращении по имени класса уже подразумевает статический доступ.
2. Если переменной требуется инициализация, то она должна находится в "неправильном" состоянии. DataGridView dgv = null;
3. Связанные классы должны находитс в одном месте.
Возможное решение говорить не буду, думаю, будет более полезно найти самому
... << RSDN@Home 1.2.0 alpha 5-AN rev. 98>>
Re[12]: C# UserControl динамические свойства контрола?
Здравствуйте, AlexNek, Вы писали:
AN>Зачем создаешь новый? AN>
public Form1()
AN> {
AN> InitializeComponent();
AN> //MyControl1 e = new MyControl1();
AN> //e.textControl = label1;
AN> myControl11.textControl = label1;
AN> }
AN>
В таком виде даже не компилится: Error 1 An object reference is required for the non-static field, method, or property 'UserControl1.MyControl1.textControl.get'... [i][/i]
Re[15]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
a> AN>Зачем создаешь новый? a> AN>
public Form1()
a> AN> {
a> AN> InitializeComponent();
a> AN> //MyControl1 e = new MyControl1();
a> AN> //e.textControl = label1;
a> AN> myControl11.textControl = label1;
a> AN> }
a> AN>
a> В таком виде даже не компилится: Error 1 An object reference is required for the non-static field, method, or property 'UserControl1.MyControl1.textControl.get'... a> [i][/i]
Странно, это были единственные исправления в проекте, возьмите то что лежит в архиве по ссылке
Здравствуйте, alexparser, Вы писали:
a> AN>Странно, это были единственные исправления в проекте, возьмите то что лежит в архиве по ссылке
a> По какой ссылке?
Не ну, а откуда я то взял?
alexparser
Дата: 22.04.11 23:53
Что-то реально увяз
Выкладываю демо-код здесь с траблой, проперти тоже ничего не дали.
Здравствуйте, alexparser, Вы писали:
A>Поясняю, есть мной разработанный UserControl, который должен взаимодействовать с датагридами на различных формах. A>При том, мой UserControl должен хранить переменные и ссылку на датагрид для каждого экземпляра окна. A>Для передачи параметров (ссылки на датагрид) в UserControl я предусмотрел класс. A>Проблема в том, что каждый новый экземпляр UserControl-а перезаписывает переменные и ссылку на датагрид. A>Это является недопустимым при одновременном использовании UserControl-а на двух и более формах.
Во-первых, если много форм, должна быть базовая форма (или тимплейт-контрол/контейнер что общий для всех форм/окон). Свой обьект UserControl создавайте в базовой форме. Так у вас будет по екземпляру контрола вашего контестного поиска для каждой формы (Естественно удалять его тоже нужно например в Dispose формы). Так отпадет проблема перекрестного использования контрола поиска (в рамках одной формы используется один и тот-же).
Во-вторых, если уж делаете контекстный поиск, сделайте более виртуально, не привязывайтесь к датагриду (мало ли, может надо будет искать в каком-то мемо, лукап-е и т.д.). Пусть за поиск в отдельно взятом контроле (гриде, мемо, текстбоксе...) отвечают конкретные провайдеры. А ваш контрол пусть работает с каким-то абстрактным интерфейсом ISearchProvider.
-----------------------------------------
тут может быть ваша реклама
Re[18]: C# UserControl динамические свойства контрола?
Здравствуйте, alexparser, Вы писали:
a> a>> По какой ссылке?
a> AN>Не ну, а откуда я то взял?
a> Дык тест-проект у меня есть, я же его сам выложил.
Ну так в него то мои три строчки и внесите, две линии убрать и одну вставить.
Специально кинул больше чтобы было понятно куда вставлять.
a> Я думал будет линк на пофиксенный проект..
А я думал масла будет достаточно, Вам в два слоя на хлеб намазать или в один?
a> p.s. вроде бы не сложный вопрос, а увяз вон на скока, да и гугляндии ничего полезного не нарыл
Поиском тут ничего не найдете, нужно просто немного подумать.