Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как обратиться из класса к объекту на форме 
:(
    Опции темы
styu
Дата 6.11.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Здравствуйте! Возможно мой вопрос уже звучал на форуме, но я очень прошу помочь. Я только начала изучать VS и мне очень сложно и очень много я не понимаю. Написала обработчик события на нажатие клавиши delete в отдельном классе, т.е когда нажимаешь клавишу delete появляется окно messageBox с двумя кнопками Ok и Cancel, можно по ним либо согласится на удаление записи из базы, либо отменить действие. С кнопками все нормально, но я не могу из этого класса обратиться  к oleDb DataAdapter, который находится в классе Form1, чтобы обновить отображение базы в DataGrid, хотя  oleDbDataAdapter установлен в Public. Пожалуйста помогите. Может я спрашиваю элементарные вещи, но сама я никак не соображу. Заранее спасибо
PM MAIL   Вверх
Экскалупатор
Дата 6.11.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



читаем эту тему
ну если будет не понятно, то покажи как ты пытаешься обратиться к своей форме из своего класса? скорее всего твой класс ничего не знает о существовании твоей формы, по этому и не можешь обратиться...


 smile 
Цитата

но я не могу из этого класса обратиться  к oleDb DataAdapter, который находится в классе Form1, чтобы обновить отображение базы в DataGrid, хотя  oleDbDataAdapter установлен в Public.

если честно это у тебя какая то жесть. надо как то более гармонично разрабатывать структуру, и тогда не будут появляться такие вопросы. почему у вас oleDb DataAdapter находиться прямо в форме? и уж совсем не айс то что он public. короче просто жесть...

Это сообщение отредактировал(а) Экскалупатор - 6.11.2009, 14:26
PM MAIL ICQ   Вверх
styu
Дата 6.11.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Цитата

ну если будет не понятно, то покажи как ты пытаешься обратиться к своей форме из своего класса? скорее всего твой класс ничего не знает о существовании твоей формы, по этому и не можешь обратиться...


Form1 fm = new Form1();
fm.OleDbDataAdapter.Fill(DataSet1.Table["База"]);
Но ничего не происходит, как я понимаю создается новая форма

Цитата

если честно это у тебя какая то жесть. надо как то более гармонично разрабатывать структуру, и тогда не будут появляться такие вопросы. почему у вас oleDb DataAdapter находиться прямо в форме? и уж совсем не айс то что он public. короче просто жесть...


Я, конечно, понимаю, что со стороны может это выглядить полной неграмотностью, но пока, к сожалению,у меня нет достаточных знаний в C#, чтобы все гармонично структурировать. На форумах писали, чтобы из класса обратиться к Control-у формы, надо установить его в public или я неправильно поняла? Заранее спасибо за ответ
PM MAIL   Вверх
KuMa1104
Дата 6.11.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Ои написано много всё читать лень, ивидал это
Цитата(styu @  6.11.2009,  22:16 Найти цитируемый пост)
Form1 fm = new Form1();fm.OleDbDataAdapter.Fill(DataSet1.Table["База"]);


переопредели конструктор чтоб он он у тебя как параметр принимал твою форму и использовал ссылку на неё.


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 6.11.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



скорее всего(я даже полностью уверен), что у тебя экземпляр fm и та форма которая у тебя показывается это две совершенно разные формы.
у тебя есть класс Program и в нем метод Main в котором есть строки
Код

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }



ты не думала что тут происходит? как раз тут и запускается твоя форма1, а то что ты объявляешь в своем классе новую форму, это уже другая форма1 и в ней нету тех данных которые тебе нужны. Сделай что бы в метод который ты выполняешь передавалась ссылка на уже запущенную форму...
покажи код своего класса в котором ты хочешь обратиться к форме.
PM MAIL ICQ   Вверх
KuMa1104
Дата 6.11.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3





MyClass
{
Form1 fm = null;
MyClass(Form1 f)
{
fm = f;
}

// теперь можне делать любые чёрные дела)))

void func()
{
fm.OleDbDataAdapter.Fill(DataSet1.Table["База"])
}
}


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 6.11.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



KuMa1104, теперь ты меня опередил...))))
PM MAIL ICQ   Вверх
KuMa1104
Дата 6.11.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Аха ха!!!!

Экскалупатор привет!
Оперативно работаемс))

Я только хотел это написать))

У тебя как 6 чуство, наверно!!!!



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 6.11.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



KuMa1104, тип того...


styu, относительно архитектуры. нельзя делать public поля(точнее, физически конечно можно, но это неправильно), тебе надо сделать метод который бы управлял этим полем и через него работать. это будет уже что то, а еще лучше убрать это поле совсем, сделать отдельный класс для базы и сделать класс который будет соединять базу с формой. как то так. а иначе каша жесть какая получается. сам года два назад так делал, теперь как взгляну так аж плакать хочется...
PM MAIL ICQ   Вверх
KuMa1104
Дата 6.11.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Тогда уж может быть лучше определить интерфеисы, посредством реализации которых в классе будет осушествляться управление?

Покраине мере это будет гарантировать что класс содержит минимальный набор функций и методов необходимых для работы.

Добавлено через 4 минуты и 58 секунд
Я имею в виду что форме в принципе всё равно что за класс, главное чтоб он реализовал интерфейс.

Код

MyClass : IViev
{
void IViev.Init()
{
// ...............
}




А форма работает с классом
Код

MyClass GG;
//......
IViev Iva = GG as IViev;
if(Iva != null)
{
Iva.Init();
// и тодгдалее
}




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
styu
Дата 8.11.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Спасибо огромное за ответы, я Вам все очень благодарна. Почитав Ваши сообщения поняла, что я очень многого не знаю. Поделитесь, пожалуйста, с чего Вы начинали изучать С#. Заранее спасибо
PM MAIL   Вверх
KuMa1104
Дата 9.11.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



С любой книжки которая тебе понравиться))

Я читал Троелсен Эндрю С# и платформа нет.


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
styu
Дата 10.11.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



У меня к сожалению ничего не получилось. Выкладываю код класса, может это поможет
Код


class MyMessageFilter: IMessageFilter
       {
    const int WM_KEYDOWN = 0x0100;
    EventArgs e;

    public class WinManager
        {
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string className,string windowName);
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd,uint msg, IntPtr wParam, IntPtr lParam); 
         }

             public class WindowKiller
         {
        private const uint WM_CLOSE = 0x0010;
        public static void CloseWindow(string className,string windowName)
              {
             IntPtr hWnd = WinManager.FindWindow(className,windowName);
             WinManager.SendMessage(hWnd,WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
               }
          }

      private void CloseMessageBox()
          {
        WindowKiller.CloseWindow("#32770",null);
          }
                
       public bool PreFilterMessage(ref Message m)
          {    
        if(m.Msg == WM_KEYDOWN)
             {
            Keys key = (Keys)(int)m.WParam;
            switch(key)
            {
                  case Keys.Delete:
                  {
                string message = "Эта запись будет удалена. Вы хотите удалить запись?";
                string caption = "Question";
                MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                DialogResult result;
                result = MessageBox.Show(message, caption, buttons,   Messeigneurs.Question,  MessageBoxDefaultButton.Button1, 
                MessageBoxOptions.DefaultDesktopOnly);
                            
                if(result == DialogResult.No)
                    {
                    CloseMessageBox();
                    MessageBox.Show("Try to close me!");

                                                           // Вот тут хотелось бы обратиться к форме
                                                           // точнее к OleDbDataAdapter  
                    }
                break;
                  }
            }
        }


 Заранее спасибо
PM MAIL   Вверх
Экскалупатор
Дата 10.11.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM MAIL ICQ   Вверх
styu
Дата 12.11.2009, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Цитата

public MyMessageFilter(Form1 form)
{
}



Так записать не могу, выдает синтаксическую ошибку

Цитата

или тут
public bool PreFilterMessage(ref Message m, Form1 form)


в методе я тоже не могу записать, синтаксическая ошибка, так как bool PreFilterMessage(ref Message m);

Записала 

Код

class MyMessageFilter:IMessageFilter
       {    
           Form1 form;
           // Далее в методе пишу
           public bool PreFilterMessage(ref Message m)
           { 
                        form.oleDbDataAdapter1.Fill(form.dataSet1.Tables["База"]);
                     }
         }


Это все компилируется, но при вызове метода PreFilterMessage выдает ошибку: 

An unhandled exception of type 'System.NullReferenceException' occurred in Project.exe

Additional information: Object reference not set to an instance of an object.

И что с этим делать дальше не знаю  smile 
PM MAIL   Вверх
KuMa1104
Дата 12.11.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Так ну ты понаписал......
Цитата(styu @  12.11.2009,  21:51 Найти цитируемый пост)
Так записать не могу, выдает синтаксическую ошибку

 что ещё за ошибка?

Добавлено @ 22:40
[QUOTE=styu,12.11.2009,  21:51]
Цитата

 Object reference not set to an instance of an object.

И что с этим делать дальше не знаю  smile


Компилятор ругаеться что у тебя нет обекта!!!

Добавлено @ 22:47
Цитата(styu @  12.11.2009,  21:51 Найти цитируемый пост)
в методе я тоже не могу записать, синтаксическая ошибка, так как bool PreFilterMessage(ref Message m);


При вызове функции у тебя параметры задаваемые должны соответствовать её определению т.е.

если есть
Код


void fnc(int a, string b)
{
//бла бла
}



то и вызывать надо

Код

 fnc(7,"AAAA");

так ошибка 
Код

fnc(7);


Добавлено @ 22:51
Стоп...styu
Цитата(styu @  12.11.2009,  21:51 Найти цитируемый пост)
Записала 


Цитата(styu @  6.11.2009,  13:37 Найти цитируемый пост)
 Я только начала изучать VS 


Стю ты девушка??

Добавлено @ 22:53
Хмм... кинь снова код который ты написала после наших советов или самостоятельно вставь это. 

Это сообщение отредактировал(а) KuMa1104 - 12.11.2009, 23:06


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
KuMa1104
Дата 12.11.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



почитал твои код...

твои класс переопределяем конструктор 
Код

class MyMessageFilter
{
Form1 formochka;

 public MyMessageFilter(Form1 f)
{
   formochka = f;
}
}


Добавлено через 1 минуту и 38 секунд
теперь через formochka обращайся к своему OleDbDataAdapter , но убедись что он в Form1  обявлен как  public  иначе его видно не будет.

Добавлено через 4 минуты и 43 секунды
Кстати а не сложноватое ли ты задания выбрала для начала знакомства с C#
Цитата(styu @  6.11.2009,  13:37 Найти цитируемый пост)
 Я только начала изучать VS и мне очень сложно и очень много я не понимаю


зачем тогда сразу решила использовать всё это? Ты на С++ до этого писала чтоли??
Код

 [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string className,string windowName);
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd,uint msg, IntPtr wParam, IntPtr lParam); 
         }

             public class WindowKiller
         {
        private const uint WM_CLOSE = 0x0010;
        public static void CloseWindow(string className,string windowName)
              {
             IntPtr hWnd = WinManager.FindWindow(className,windowName);
             WinManager.SendMessage(hWnd,WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
               }
          }




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 13.11.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



styu
Цитата

в методе я тоже не могу записать, синтаксическая ошибка, так как bool PreFilterMessage(ref Message m);


я же написал что надо в вызывающий метод передать ссылку на твою форму.
Цитата

а если в метод то соответственно myMessageFilter.PreFilterMessage("тут какой то message", this)
и все должно работать.


а если в конструкторе добавляешь то при инициализации объекта класса в конструктор надо передать ссылку на твою форму... выложи свой код, код формы и код класса, исправим тут
PM MAIL ICQ   Вверх
KuMa1104
Дата 13.11.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Экскалупатор @  13.11.2009,  00:45 Найти цитируемый пост)
 выложи свой код, код формы и код класса, исправим тут

Да.... Пожалуй так будет проще всего.


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 13.11.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



KuMa1104, привет, я и не заметил, что ты тут целые уроки выложил...)))
PM MAIL ICQ   Вверх
KuMa1104
Дата 13.11.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Экскалупатор привет!!!

Цитата(Экскалупатор @  13.11.2009,  01:51 Найти цитируемый пост)
я и не заметил, что ты тут целые уроки выложил...)))

Лиш бы автор топика заметила smile 



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 13.11.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



я смотрю она появляется от раз в два - четыре дня. значит не сильно нужно...
PM MAIL ICQ   Вверх
KuMa1104
Дата 14.11.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Экскалупатор @  13.11.2009,  18:59 Найти цитируемый пост)
я смотрю она появляется от раз в два - четыре дня. значит не сильно нужно...


Подождём и увидем, верна ли твоя теория smile 



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
styu
Дата 1.12.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Только сейчас увидела Ваши советы, честно говоря, думала, что вы меня уже совсем бросили, как необучаемую ;). Советы очень нужны. Я просто на некоторое время забросила код и села изучать теорию. На С++  я не писала, писала на Delphi. Код выложу завтра. Большое Вам спасибо
PM MAIL   Вверх
Экскалупатор
Дата 1.12.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



styu, ты если бы чаще появлялась то видела бы что ты еще не самая "необучаемая". главное что бы ты сама понимала, что делаешь и для чего.
PM MAIL ICQ   Вверх
styu
Дата 1.12.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Цитата

styu, ты если бы чаще появлялась то видела бы что ты еще не самая "необучаемая". главное что бы ты сама понимала, что делаешь и для чего.


   smile

Добавлено через 4 минуты и 58 секунд
Выкладываю полностью код
Код

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;




namespace _789
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        public System.Data.DataSet dataSet1;
        private System.Data.DataTable dataTable1;
        private System.Data.DataColumn dataColumn1;
        private System.Data.DataColumn dataColumn2;
        private System.Data.DataColumn dataColumn3;
        private System.Data.DataColumn dataColumn4;
        private System.Data.DataColumn dataColumn5;
        private System.Data.DataColumn dataColumn6;
        private System.Data.DataColumn dataColumn7;
        private System.Data.DataColumn dataColumn8;
        private System.Data.DataColumn dataColumn9;
        private System.Data.DataColumn dataColumn10;
        private System.Data.DataColumn dataColumn11;
        private System.Data.DataColumn dataColumn12;
        private System.Data.DataColumn dataColumn13;
        private System.Data.DataColumn dataColumn14;
        private System.Data.OleDb.OleDbConnection oleDbConnection1;
        public System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
        private System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;
        private System.Data.OleDb.OleDbCommand oleDbInsertCommand1;
        private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
        private System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;
        private System.Windows.Forms.DataGrid dataGrid1;
        
        /// <summary>
        /// Required designer variable.
        /// </summary>
        /// 
        
        
        private System.ComponentModel.Container components = null;
        public System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        MyMessageFilter myMessageFilter = new MyMessageFilter();  //  вот в этом месте выдают ошибку (No overload for method 'MyMessageFilter' takes '0' arguments) я его конечно понимаю, но как исправить не знаю
        
            
        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }


        protected override void OnClosing(CancelEventArgs e)
        {
            Application.RemoveMessageFilter(myMessageFilter);
            base.OnClosing (e);
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad (e);
            Application.AddMessageFilter(myMessageFilter);
        }

                        
        private void Form1_Load(object sender, System.EventArgs e)
        {
            try
            {    
                oleDbDataAdapter1.Fill(dataSet1.Tables["Klapan"]);        // вызов базы
            }
            catch(Exception exc)                                        // Ошибка доступа к базе 
            {
                MessageBox.Show("Ошибка доступа к базе данных.\n" + exc.Message, "Клапаны", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
        }
        
        public void button1_Click(object sender, System.EventArgs e)
        {
            oleDbDataAdapter1.Fill(dataSet1.Tables["Klapan"]);        // вызов базы
        }
        
        class MyMessageFilter: IMessageFilter
        {        
            const int WM_KEYDOWN = 0x0100;
            EventArgs e;
            
            Form1 formochka;
            public MyMessageFilter(Form1 f)
            {    
                formochka = f;
            }

            public class WinManager
                {
                    [DllImport("user32.dll")]
                    public static extern IntPtr FindWindow(string className,string windowName);
                    [DllImport("user32.dll")]
                    public static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); 
                }

            public class WindowKiller
            {
                private const uint WM_CLOSE = 0x0010;
                public static void CloseWindow(string className,string windowName)
                {
                    IntPtr hWnd = WinManager.FindWindow(className,windowName);
                    WinManager.SendMessage(hWnd,WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
                }
            }

            private void CloseMessageBox()
            {
                WindowKiller.CloseWindow("#32770",null);
            }
                
            public bool PreFilterMessage(ref Message m)
            {    
                if(m.Msg == WM_KEYDOWN)
                {
                    Keys key = (Keys)(int)m.WParam;
                    switch(key)
                    {
                        case Keys.Delete:
                        {
                            string message = "Эта запись будет удалена. Вы хотите удалить запись?";
                            string caption = "Question";
                            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                            DialogResult result;
                            result = MessageBox.Show(message, caption, buttons,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, 
                                MessageBoxOptions.DefaultDesktopOnly);
                            
                            if(result == DialogResult.Yes)
                            { 
                                MessageBox.Show("Так уж и быть удалю!!!");
                            }
                            if(result == DialogResult.No)
                            {                                
                                CloseMessageBox();
                                MessageBox.Show("Можешь меня закрыть!");
                                formochka.oleDbDataAdapter1.Fill(formochka.dataSet1.Tables["Klapan"]);
                            }
                            break;
                        }
                    }
                }
                

                return false;   
            }
                
        }
    }
}



извините, уж очень много получилось
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1604 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.