2009-07-24 28 views
8

Tôi muốn thay đổi tất cả các ký tự được nhập vào một hộp văn bản thành chữ hoa. Mã sẽ thêm ký tự, nhưng làm cách nào để di chuyển dấu mũ sang phải?Cách di chuyển dấu nháy chữ vào bên phải

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

bạn đang sử dụng khung GUI nào? Đây có phải là hình thức giành chiến thắng không? wpf? silverlight? –

+0

@ monkey_boys-Tôi hy vọng những thay đổi của tôi để lại ý nghĩa của bạn nguyên vẹn. –

+0

Lưu ý rằng 'textBox3.Text + = e.KeyChar.ToString(). ToUpper()' sẽ luôn thêm ký tự mới cuối cùng trong hộp văn bản, ngay cả khi dấu mũ nằm ở giữa văn bản. –

Trả lời

18

Đặt CharacterCasing tài sản của TextBox-Upper; thì bạn không cần phải xử lý nó theo cách thủ công.

Lưu ý rằng textBox3.Text += e.KeyChar.ToString().ToUpper(); sẽ chắp thêm ký tự mới vào cuối chuỗi ngay cả khi dấu đầu vào nằm ở giữa chuỗi (hầu hết người dùng sẽ thấy rất khó hiểu). Vì lý do tương tự, chúng tôi không thể giả định rằng dấu mũ đầu vào sẽ xuất hiện ở cuối chuỗi sau khi nhập ký tự.

Nếu bạn vẫn thực sự muốn làm điều này trong mã, một cái gì đó như thế này nên làm việc:

// 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: Tôi đã cung cấp một câu trả lời thay thế vì nó có thể hữu ích trong các tình huống khác. –

1

này sẽ duy trì vị trí của điểm chèn (nhưng persionally Tôi muốn đi với câu trả lời được đưa ra bởi 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; 
} 

SelectStart thực sự có thể được gọi là SelStart, hiện tại tôi không có trình biên dịch.

1

Nếu bạn phải làm điều này bằng tay, bạn có thể sử dụng

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

Nhưng mã trước chèn nhân vật mới vào cuối của văn bản. Nếu bạn muốn chèn nó ở vị trí con trỏ là:

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; 
} 

Mã này chèn ký tự mới tại vị trí con trỏ và di chuyển con trỏ sang trái của ký tự mới được chèn.

Nhưng tôi vẫn nghĩ rằng việc đặt CharacterCasing là tốt hơn.

0

phương pháp khác là chỉ cần thay đổi giá trị của bản thân 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); 
     } 
    } 

Mặc dù, sử dụng tài sản CharacterCasing là giải pháp đơn giản nhất.

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

Đây là cách tuyệt vời để thêm văn bản trước loại người dùng. –

+0

+1, Tuyệt vời !!!!!! – ABCD

2
private void txtID_TextChanged(object sender, EventArgs e) 
{ 
    txtID.Text = txtID.Text.ToUpper(); 
    txtID.SelectionStart = txtID.Text.Length; 
} 
Các vấn đề liên quan