Програмуємо на C#. Незручні запитання

Відповіді на запитання не для форумів.
Той, хто почав читати цю статтю, не є висококласним, професійним програмістом, бо ніякий пошуковець не знайде в статті слова, потрібні програмістам високого класу. Довелось і собі написати статтю, з часом це буде кілька статей, для програмістів, які ще недосконало володіють прийомами програмування на C# (Сі-шарп). Ці програмісти задають свої запитання на форумах. Що ж вони чують у відповідь ?

Візьмемо наугад одне з запитань, потрібних початківцю. Програміст-початківець, як може, формулює ось таку проблему:
Після запуску програми одне з віконець ComboBox (комбобокс), або TextBox, чомусь завжди є “відкритим”, і машинальний рух коліщатком миші змінює вибраний параметр цього віконця. Можна, звісно, пояснити всім користувачам програми, щоб після запуску програми натискали мишкою на якийсь інший об’єкт, або робили ще якісь додаткові дії, але це незручно. Як зробити, щоб після запуску програми всі віконця ComboBox чи TextBox, чи ще якісь, були пасивними ? Щоб не залежали від коліщатка мишки  ?
Що чує програміст у відповідь ?
На англомовних форумах:
Place a box outside the visible portion of the screen, and Handle mouseWheel event traditional +=.. (можете не перекладати, все одно початківцю нічого не зрозуміло).
На російськомовних форумах:
Нужно добавить полное имя, включая название модуля, в котором определяется класс, а не просто сделать рекурсию, когда класс наследуется сам от себя.
Надзвичайно корисні і потрібні поради ! Такі зрозумілі і прості, як теорія відносності. Доведеться відповідати на такі запитання в своїй статті, але щоб відповіді були “не для продвинутих”, а для нормальних людей, які навчаються програмувати на C#.
Власне, з цього запитання я починаю.

Запитання 1. Чому після запуску програми, написаної на C# яким-небудь звичним Visual Studio, одне з віконець, наприклад, Combobox, вже є відкритим, і реагує на коліщатко миші ? Чому після користування аналогічним іншим віконцем воно залишається “відкритим” і так само реагує на мишу ? Як позбавитись цієї особливості ?
Відповідь: Так вирішено професіоналами, що при запуску зробленої вами програми один з об’єктів на “формі” (загальному вікні вашої працюючої програми) завжди знаходиться “в фокусі”, і залежить від дій маніпулятора, в даному разі від “миші”. Щоб цей “фокус” не заважав, його треба перекинути на інший об’єкт програми. Наприклад, на якийсь надпис на “формі”. Як це зробити ?
Якщо в самому тілі програми “Form1” (назва взята наприклад) помістити переназначення фокуса на інший об’єкт, наприклад, на якусь мітку, то це не допомагає. Ось дивіться:

        public Form1()
        {
       InitializeComponent();
//      ще якісь дії, потрібні в програмі, і нарешті в кінці
       label1.Focus();     //   непогана задумка, кидаємо фокус на мітку 1, але але не працює
       }

Можна зробити просту програмну хитрість. Вставимо в програму таймер, навіть якщо він нам не потрібен. Якщо не знаєте, який зробити період таймера, наугад поставте в параметрах 100 мс. До таймера додамо змінну величину-ідентифікатор стану фокуса, наугад назвемо її knop. Не зробіть машинальний ляп ! Змінна повинна бути за межами таймера.

       int knop=0;    // звичайна змінна, можна цілу, можна байтну, можна ще якусь
      private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
      {
      if(knop==0){label1.Focus();knop=1;};    // якщо knop=0, то перекинути фокус на мітку 1
//     якщо треба таймер ще для чогось, можна використати
      }

А в наших віконцях ComboBox, TextBox чи подібних, додаємо такий трюк:

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
          {
//       щось робимо в цьому віконці, що нам треба, а в кінці:
         knop=0;
          }

І це все ! Кожне з цих віконець вже не буде прив’язане до миші після того, як віконцем користувались при роботі програми. Ні одне з цих віконець не буде прив’язане до коліщатка миші після запуску програми. Таймер регулярно закидує фокус на вибрану нами мітку. Дрібна заважаюча проблема вирішена.

Запитання 2. (далі буде, стаття не закінчена)

Всім бажаючим продаємо наш інформаційний архів

Ви можете замовити ВЕСЬ наш файловий архів, його об'єм - більше 12 Гігабайт. Отримати можна в вигляді бандеролі з чотирма DVD-дисками, на яких ВСІ наші схеми, мануали, вся додаткова інформація, або завантажити вказаний архів через Інтернет. При завантаженні через Інтернет - вартість замовлення 120 грн, при замовленні на DVD-дисках - вартість 180 грн при замовленні доставки звичайною Укрпоштою, або 200 грн при замовленні доставки Новою поштою. Оплата - після отримання замовлення.
Ось СПИСОК НАШИХ ФАЙЛІВ.
Для замовлення архіва треба перейти НА СТОРІНКУ ЗАМОВЛЕННЯ.
Схема мануал телевизора шасси, схему скачать бесплатно, ищу схему модулей, ищу шасси телевизора, схемы телевизоров, мануалы

Залишити відповідь (Leave a Reply)