Не удалось преобразовать TextBox_TextChanged () в C ++ в C #

Я работал над C ++ с Juce Library в течение нескольких месяцев. Я написал код в своем проекте, где форматирование текстового поля было изменено только на шестнадцатеричные значения с несколькими функциями:

Demonstratation:

12 ab 32 a5 64

Теперь, если мой курсор находится в конце, и я продолжаю нажимать клавишу Backspace, он должен удалить значения, как это происходит в обычном текстовом поле.

Теперь, если мой курсор находится в начале a5, и я нажимаю «клавишу удаления», значение должно выглядеть так:

12 ab 32 56 4

Если мой курсор находится в конце a5 и я нажимаю клавишу «delete», ничего не должно происходить. При вводе значений пробел не должен допускать интервал между двумя значениями. Допускается ввод только a-f и 0-9.

Код на C ++ здесь:

void CMSP430CommPanel::textEditorTextChanged (TextEditor& editor)
{

if(&editor == m_texti2cWrite)
{
int count = 0;
int location;

String text1 = m_texti2cWrite->getText();
String text = m_texti2cWrite->getText().removeCharacters(" ");
String hexString = String::empty;
int countCaret = m_texti2cWrite->getCaretPosition();

for(int i=0; i < text.length(); i++)
{
hexString = hexString + String (&text[i], 1);
if((i+1) % 2 == 0)
{
if(i != text.length()-1)
{
hexString = hexString + T(" ");
count ++;
}
}
count ++;
}

m_texti2cWrite->setText(hexString,false);

if(text1.length() == m_texti2cWrite->getCaretPosition())
{
m_texti2cWrite->setCaretPosition(count);
}
else
{
m_texti2cWrite->setCaretPosition(countCaret);
}
}
}

Я хочу, чтобы то же самое работало в моем приложении WPF. Допустим, общая реализация того же кода в C #.

пожалуйста помоги!!!

1

Решение

Попробуйте это (TextChanged-Event вашего TextBox):

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox m_texti2cWrite = (TextBox)sender;
int count = 0;

string text1 = m_texti2cWrite.Text;
string text = m_texti2cWrite.Text.Replace(" ", string.Empty);
string hexString = string.Empty;
int countCaret = e.Changes.ToList()[0].Offset;

for (int i = 0; i < text.Length; i++)
{
hexString += text[i];
if ((i + 1) % 2 == 0)
{
if (i != text.Length - 1)
{
hexString = hexString + " ";
count++;
}
}
count++;
}

m_texti2cWrite.Text = hexString;
if (text1.Length == countCaret)
{
m_texti2cWrite.Select(count, 0);
}
else
{
if (e.Changes.ToList()[0].RemovedLength == 0)
{
m_texti2cWrite.Select(countCaret + 1, 0);
if (string.IsNullOrWhiteSpace(hexString.Substring(countCaret, 1)))
m_texti2cWrite.Select(countCaret + 2, 0);
}
else
{
m_texti2cWrite.Select(countCaret, 0);
if (string.IsNullOrWhiteSpace(hexString.Substring(countCaret, 1)))
m_texti2cWrite.Select(countCaret + 1, 0);
}
}
}
}

РЕДАКТИРОВАТЬ (принимать только цифры, клавиши управления или a-f):

  1. Добавьте этот метод:

    private Boolean IsTextAllowed(String text)
    {
    string acceptedChars = "ABCDEFabcdef";
    foreach (Char c in text.ToCharArray())
    {
    if (Char.IsDigit(c) || Char.IsControl(c) || acceptedChars.Contains(c)) continue;
    else return false;
    }
    return true;
    }
    
  2. Добавьте TextBox_PreviewTextInput-Event в ваш TextBox

    private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
    e.Handled = !IsTextAllowed(e.Text);
    }
    
1

Другие решения

public class CMSP430CommPanel
{
//C++ TO C# CONVERTER WARNING: The original C++ declaration of the following method implementation was not found:
public void textEditorTextChanged(TextEditor editor)
{

if (editor == m_texti2cWrite)
{
int count = 0;
int location;

string text1 = m_texti2cWrite.getText();
string text = m_texti2cWrite.getText().removeCharacters(" ");
string hexString = string.empty;
int countCaret = m_texti2cWrite.getCaretPosition();

for (int i = 0; i < text.Length; i++)
{
hexString = hexString + (string)(text[i], 1);
if ((i + 1) % 2 == 0)
{
if (i != text.Length - 1)
{
hexString = hexString + T(" ");
count++;
}
}
count++;
}

m_texti2cWrite.setText(hexString,false);

if (text1.Length == m_texti2cWrite.getCaretPosition())
{
m_texti2cWrite.setCaretPosition(count);
}
else
{
m_texti2cWrite.setCaretPosition(countCaret);
}
}
}
}
0

По вопросам рекламы [email protected]