/ / Jak mogę zapobiec przesuwaniu kursora / kursora w polu tekstowym w lewo i prawo w oknie dialogowym c #? - c #, pole tekstowe, keydown

W jaki sposób zapobiegać przesuwaniu się kursora / kursora w polu tekstowym na lewo i na prawo w formularzu okna c #. - c #, pole tekstowe, keydown

Obecnie próbuję zwiększyć indeks kursora o 1. Na przykład, jeśli mój migający kursor znajdował się między 2 a 1 na 210, zwiększyłbym wartość do 220.

Jest to część kodu, którego używam teraz. Usiłuję sprawić, aby kursor pozostał na swoim miejscu po naciśnięciu i przesunięciu w prawo. Próbowałem przywrócić SelectionStart z powrotem do 0, ale pole domyślnie zwiększa go o 1 (pierwszy indeks kursora mojego pola tekstowego zaczyna się po lewej stronie).

        TextBox textBox = (TextBox)sender;
int box_int = 0;
Int32.TryParse(textBox.Text, out box_int);
if (e.KeyCode == Keys.Down)
{
if(textBox.SelectionStart == 0)
{
box_int -= 10000;
textBox.Text = box_int.ToString();
textBox.SelectionStart= 0;
return;
}
}

Odpowiedzi:

2 dla odpowiedzi № 1

Aby zapobiec przesuwaniu kursora (nie kursora), powinieneś ustawić e.Handled = true; w twoim module obsługi zdarzeń. Ten kod zmienia cyfrę po prawej stronie kursora po naciśnięciu strzałki w górę lub w dół. Po naciśnięciu strzałki w górę lub w dół, e.Handled jest ustawiony na wartość true, aby zapobiec ruchowi karetki. Ten kod nie jest w pełni przetestowany, ale wydaje się, że działa. Ustawiłem też pole tekstowe ReadOnly właściwość na true i ustaw wartość na „0”.

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{

TextBox textBox = (TextBox)sender;

//Only change the digit if there is no selection
if (textBox.SelectionLength == 0)
{
//Save the current caret position to restore it later
int selStart = textBox.SelectionStart;

//These next few lines determines how much to add or subtract
//from the value based on the caret position in the number.
int box_int = 0;
Int32.TryParse(textBox.Text, out box_int);

int powerOf10 = textBox.Text.Length - textBox.SelectionStart - 1;
//If the number is negative, the SelectionStart will be off by one
if (box_int < 0)
{
powerOf10++;
}

//Calculate the amount to change the textbox value by.
int valueChange = (int)Math.Pow(10.0, (double)powerOf10);

if (e.KeyCode == Keys.Down)
{
box_int -= valueChange;
e.Handled = true;
}
if (e.KeyCode == Keys.Up)
{
box_int += valueChange;
e.Handled = true;
}

textBox.Text = box_int.ToString();
textBox.SelectionStart = selStart;
}
}