![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
styu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Здравствуйте! Возможно мой вопрос уже звучал на форуме, но я очень прошу помочь. Я только начала изучать VS и мне очень сложно и очень много я не понимаю. Написала обработчик события на нажатие клавиши delete в отдельном классе, т.е когда нажимаешь клавишу delete появляется окно messageBox с двумя кнопками Ok и Cancel, можно по ним либо согласится на удаление записи из базы, либо отменить действие. С кнопками все нормально, но я не могу из этого класса обратиться к oleDb DataAdapter, который находится в классе Form1, чтобы обновить отображение базы в DataGrid, хотя oleDbDataAdapter установлен в Public. Пожалуйста помогите. Может я спрашиваю элементарные вещи, но сама я никак не соображу. Заранее спасибо
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
читаем эту тему
ну если будет не понятно, то покажи как ты пытаешься обратиться к своей форме из своего класса? скорее всего твой класс ничего не знает о существовании твоей формы, по этому и не можешь обратиться... ![]()
если честно это у тебя какая то жесть. надо как то более гармонично разрабатывать структуру, и тогда не будут появляться такие вопросы. почему у вас oleDb DataAdapter находиться прямо в форме? и уж совсем не айс то что он public. короче просто жесть... Это сообщение отредактировал(а) Экскалупатор - 6.11.2009, 14:26 |
|||
|
||||
styu |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Form1 fm = new Form1(); fm.OleDbDataAdapter.Fill(DataSet1.Table["База"]); Но ничего не происходит, как я понимаю создается новая форма
Я, конечно, понимаю, что со стороны может это выглядить полной неграмотностью, но пока, к сожалению,у меня нет достаточных знаний в C#, чтобы все гармонично структурировать. На форумах писали, чтобы из класса обратиться к Control-у формы, надо установить его в public или я неправильно поняла? Заранее спасибо за ответ |
||||
|
|||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Ои написано много всё читать лень, ивидал это
переопредели конструктор чтоб он он у тебя как параметр принимал твою форму и использовал ссылку на неё. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
скорее всего(я даже полностью уверен), что у тебя экземпляр fm и та форма которая у тебя показывается это две совершенно разные формы.
у тебя есть класс Program и в нем метод Main в котором есть строки
ты не думала что тут происходит? как раз тут и запускается твоя форма1, а то что ты объявляешь в своем классе новую форму, это уже другая форма1 и в ней нету тех данных которые тебе нужны. Сделай что бы в метод который ты выполняешь передавалась ссылка на уже запущенную форму... покажи код своего класса в котором ты хочешь обратиться к форме. |
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
MyClass { Form1 fm = null; MyClass(Form1 f) { fm = f; } // теперь можне делать любые чёрные дела))) void func() { fm.OleDbDataAdapter.Fill(DataSet1.Table["База"]) } } -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
KuMa1104, теперь ты меня опередил...))))
|
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Аха ха!!!!
Экскалупатор привет! Оперативно работаемс)) Я только хотел это написать)) У тебя как 6 чуство, наверно!!!! -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
KuMa1104, тип того...
styu, относительно архитектуры. нельзя делать public поля(точнее, физически конечно можно, но это неправильно), тебе надо сделать метод который бы управлял этим полем и через него работать. это будет уже что то, а еще лучше убрать это поле совсем, сделать отдельный класс для базы и сделать класс который будет соединять базу с формой. как то так. а иначе каша жесть какая получается. сам года два назад так делал, теперь как взгляну так аж плакать хочется... |
|||
|
||||
KuMa1104 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Тогда уж может быть лучше определить интерфеисы, посредством реализации которых в классе будет осушествляться управление?
Покраине мере это будет гарантировать что класс содержит минимальный набор функций и методов необходимых для работы. Добавлено через 4 минуты и 58 секунд Я имею в виду что форме в принципе всё равно что за класс, главное чтоб он реализовал интерфейс.
А форма работает с классом
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
styu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Спасибо огромное за ответы, я Вам все очень благодарна. Почитав Ваши сообщения поняла, что я очень многого не знаю. Поделитесь, пожалуйста, с чего Вы начинали изучать С#. Заранее спасибо
|
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
С любой книжки которая тебе понравиться))
Я читал Троелсен Эндрю С# и платформа нет. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
styu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
У меня к сожалению ничего не получилось. Выкладываю код класса, может это поможет
Заранее спасибо |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
как я и говорил твой класс ничего не знает о существовании формы.
я так понял у тебя есть класс class MyMessageFilter в котором есть еще другие классы(зачем кстати, для меня осталось загадкой, разбираться не стал) так вот, передай в этот класс ссылку на свою форму, это можно сделать в конструкторе, или в методе который будет ее использовать. например public MyMessageFilter(Form1 form) { } или тут public bool PreFilterMessage(ref Message m, Form1 form) а потом в методе своем пиши form.OleDbDataAdapter и че там тебе надо, если конечно поле OleDbDataAdapter объявлено как public. если ты этот класс используешь в своей форме то вызывай его так MyMessageFilter myMessageFilter = new MyMessageFilter(this);//это если в конструктор ссылку передавать а если в метод то соответственно myMessageFilter.PreFilterMessage("тут какой то message", this) и все должно работать. Это сообщение отредактировал(а) Экскалупатор - 11.11.2009, 00:13 |
|||
|
||||
styu |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Так записать не могу, выдает синтаксическую ошибку
в методе я тоже не могу записать, синтаксическая ошибка, так как bool PreFilterMessage(ref Message m); Записала
Это все компилируется, но при вызове метода PreFilterMessage выдает ошибку: An unhandled exception of type 'System.NullReferenceException' occurred in Project.exe Additional information: Object reference not set to an instance of an object. И что с этим делать дальше не знаю ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |