Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Про поиск символа и отключения привязки


Автор: Antiform 5.4.2008, 00:27
Подскажите началкину! Мне осталось для написания моей первой программы калькулятор (кто тока не проходил через него smile ) 2 нерешенных вопроса:
1) обработчик для кнопки bacspace! Как найти в строке символ "," и принять значение либо boolean либо отличное от нуля?
2) например есть 2 текстбокса!как отключить привязку клавиш к кнопкам (кнопки для первого бокса) на время когда focusируешь 2ой бокс, а то получается и там вводит и там!!?? Можно конечно отключить привязку клавиш 0 - 9, отключить readonly и на textbox.keypress кинуть "ввод только цифр"! Но может есть другие идеи, как стоит вопрос?

Цитата


P.S.: 
[censored 6]  smile !!! на заочке изучать, можно сказать первый, язык!! Книг понакачал!!Самому доперать по текстам книг это реальный  smile  пдц! Хорошо хоть инет есть 
и какая-никая, но соображалка бывает присутствует
  smile  smile 

Автор: PaZ1T1V 5.4.2008, 08:46
Цитата

 Как найти в строке символ "," и принять значение либо boolean либо отличное от нуля?


Код


public bool contains = false;

private void button1_Click(object sender, EventArgs e)
        {
               if (textBox1.Text.Contains(","))
                       contains = true;
        }



и дальше делай 4то тебе надо smile)

так понял или нет ? 

а про второй 4е то вообще ни4о нипонятно )

Автор: Antiform 5.4.2008, 09:15
Цитата

и дальше делай 4то тебе надо )так понял или нет ? а про второй 4е то вообще ни4о нипонятно


Спасибо за новый метод в первом вопросе! А второй есть 2 текстбокса!например
Код

  private void buttonKey_1_Click(object sender, EventArgs e) // кнопка
        {          
                DispCalc.Text += ((Button)sender).Text.ToString();
         }

 private void Form1_KeyDown(object sender, KeyEventArgs e) 
        {
            if (e.KeyCode.Equals(Keys.D1) || e.KeyCode.Equals(Keys.NumPad1)) // соответствующая клавиша
                buttonKey_1.PerformClick();
         }
 как отключить привязку клавиш к кнопкам (кнопки для первого бокса) на время когда focusируешь 2ой бокс, а то получается и там вводит и там???

Автор: PaZ1T1V 6.4.2008, 05:33
используй PreviewKeyDown

Код


private void Button1_PreviewKeyDown()
{
         e.//свойство; 
}


Автор: Antiform 7.4.2008, 16:27
PaZ1T1V будь добр, по подробней опиши! PreviewKeyDown на форме у меня стоит true

Автор: PaZ1T1V 7.4.2008, 19:25
ой, какой превьюкейдавн ??? сорри погнал

 smile 

хм, тут делается все проше, есть такое свойство readonly называется, если тебе не надо вообще во второй текстбокс цыфры- буквы нажимать, то поставь в конструкторе

textBox1.ReadOnly = true;
и + забели фон 

, а если нет, то ексть в него надо вводить когда нибудь, 4то нибудь то поставь во втором тексте в keyDown, то же самое  и + забели фон 

к примеру 

        private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            textBox1.ReadOnly = true;
            textBox1.BackColor = richTextBox1.BackColor;
        } 

и в KeyUp делай обратное 

         private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
        {
            textBox1.ReadOnly = false;
            textBox1.BackColor = richTextBox1.BackColor;
        } 

должно сканать, если дело в фокусе, а если нет,то пиши...

Автор: Antiform 7.4.2008, 20:41
Readonly у меня тру на главном боксе!
Код


 private void buttonKey_1_Click(object sender, EventArgs e) // кнопка
        {          
                GlavtextBox.Text += ((Button)sender).Text.ToString(); // <===== Этот код в первый бокс добавляет текст кнопки, то бишь "1"
         }

 private void Form1_KeyDown(object sender, KeyEventArgs e) 
        {
            if (e.KeyCode.Equals(Keys.D1) || e.KeyCode.Equals(Keys.NumPad1)) // <===== Этот код его активирует, то бишь ридонли по барабану
                buttonKey_1.PerformClick();
         }

Как сделать чтобы при фокусе на другой бокс, в главном боксе ни чего не печаталось при нажатии например на "1".
Пока писал мысля пришла! может здесь просто сделать как нить так
Код
 
private void buttonKey_1_Click(object sender, EventArgs e) // кнопка
        {        
           if (textBox2.Focus() == true)   //тока не получается этот фокус (все равно в другом боксе тоже пишет, он по другому я чувствую как то прописывается, но смысл я думаю понятен????
              {           
              }
           else
              {  
                GlavtextBox.Text += ((Button)sender).Text.ToString(); // <===== Этот код в первый бокс добавляет текст кнопки, то бишь "1"
              }
      }


Автор: PaZ1T1V 8.4.2008, 10:40
ба, сдаюсь, спроси у гуру каково нибудь...... или кинь сюда весь сурс код, мб помогу...... 

Автор: Мурлыкатам_ 8.4.2008, 13:08
А зачем вообще второй текст бокс?

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

Че-то не могу припомнить калькулятор с двумя текст боксами...  smile 

Автор: Antiform 8.4.2008, 17:44
Всё!!! Додумался! надо так:

Код

 private void Form1_KeyDown(object sender, KeyEventArgs e) 
        {
        
            if (textBox2.Focused == true)  <--- Вот так работает!
            {

            }

            else
            {
                if (e.KeyCode.Equals(Keys.D1) || e.KeyCode.Equals(Keys.NumPad1))
                    buttonKey_1.PerformClick();

                if (e.KeyCode.Equals(Keys.D2) || e.KeyCode.Equals(Keys.NumPad2))
                    buttonKey_2.PerformClick();
                 .......
             }
}


Лучше подскажите какой ключ у звездочки, деления(слэш), плюса и минуса на нам локе ====> e.KeyCode.Equals(Keys.???????)






Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)