2009-07-24 18 views
8

Chciałbym zmienić wszystkie wprowadzone znaki w polu tekstowym na wielkie litery. Kod doda znak, ale jak mogę przesunąć karetkę w prawo?Jak przesunąć ramkę textbox w prawo?

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    textBox3.Text += e.KeyChar.ToString().ToUpper(); 
    e.Handled = true; 
} 
+0

co GUI ramy używasz? Czy to są formularze wygranych? wpf? silverlight? –

+0

@ monkey_boys-Mam nadzieję, że moje zmiany pozostawiły twoje znaczenie nietknięte. –

+0

Zwróć uwagę, że 'textBox3.Text + = e.KeyChar.ToString(). ToUpper()' zawsze doda nowy znak jako ostatni w polu tekstowym, nawet jeśli karetka znajduje się pośrodku tekstu. –

Odpowiedz

18

Ustaw właściwość TextBox do UpperCharacterCasing; wtedy nie musisz przetwarzać go ręcznie.

Zauważ, że textBox3.Text += e.KeyChar.ToString().ToUpper(); doda nową postać do końca łańcucha nawet jeśli daszek wejściowy znajduje się w środku łańcucha (który większość użytkowników znajdzie bardzo mylące). Z tego samego powodu nie możemy zakładać, że wprowadzenie znaku powinno pojawić się na końcu łańcucha po wprowadzeniu znaku.

Jeśli nadal naprawdę chcesz to zrobić w kodzie, coś jak to powinno działać:

// needed for backspace and such to work 
if (char.IsControl(e.KeyChar)) 
{ 
    return; 
} 
int selStart = textBox3.SelectionStart; 
string before = textBox3.Text.Substring(0, selStart); 
string after = textBox3.Text.Substring(before.Length); 
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after); 
textBox3.SelectionStart = before.Length + 1; 
e.Handled = true; 
+0

+1: Podałem alternatywną odpowiedź, ponieważ może być przydatna w innych sytuacjach. –

1

ten zachowa położenie punktu wstawiania (ale persionally pójdę z odpowiedzi udzielonej przez Fredrik Mörk)

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)  
{   
    int selStart = textBox3.SelectionStart; 
    textBox3.Text += e.KeyChar.ToString().ToUpper();   
    textBox3.SelectionStart = selStart; 
    e.Handled = true; 
} 

SelectionStart może faktycznie nazywać się SelStart, w tej chwili nie mam kompilatora.

1

Jeśli trzeba to zrobić ręcznie, można użyć

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    textBox3.Text += e.KeyChar.ToString().ToUpper(); 
    textBox3.SelectionStart = textBox3.Text.Length; 
    e.Handled = true; 
} 

Ale poprzedzający kod wstawia nową postać na końcu tekstu. Jeśli chcesz, aby wstawić go na którym znajduje się kursor:

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    int selStart = textBox3.SelectionStart; 
    textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper()); 
    textBox3.SelectionStart = selStart + 1; 
    e.Handled = true; 
} 

Ten kod wstawia nowy znak w pozycji kursora i przesuwa kursor w lewo nowo wstawionego znaku.

Ale nadal uważam, że ustawienie Znakowanie jest lepsze.

0

Inną metodą jest po prostu zmienić wartość samego KeyChar:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { 
     if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) { 
      e.KeyChar = (char)((int)e.KeyChar & 0xDF); 
     } 
    } 

Chociaż, używając właściwości CharacterCasing jest najprostszym rozwiązaniem.

11
  tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length; 
      tbNumber.SelectionLength = 0; 
+0

To świetny sposób dodawania tekstu przed typem użytkownika. –

+0

+1, Świetnie !!!!!! – ABCD

2
private void txtID_TextChanged(object sender, EventArgs e) 
{ 
    txtID.Text = txtID.Text.ToUpper(); 
    txtID.SelectionStart = txtID.Text.Length; 
}