Как реализовать стратегию для всего приложения для перевода текста в верхний регистр? - PullRequest
0 голосов
/ 14 октября 2010

Я использую .Net (C #, WinForms, Linq to SQL, SQL Server 2008) для разработки нового бизнес-приложения, которое заменит старое приложение Foxpro. Я не писал старое приложение, но предоставляю поддержку для него, и я являюсь собственным разработчиком нового приложения.

Одно из дизайнерских решений, которое было принято много лет назад с помощью приложения Foxpro, заключалось в том, чтобы вводить весь введенный текст в верхнем регистре. Это должно было гарантировать, что весь текст имеет единый формат для отчетов о продажах, списков рассылки и т. Д.

Актуальная тема разговора между мной и некоторыми пользователями, является ли это продолжением в новом приложении. Вероятно, это будет продолжено.

Мой вопрос: какова лучшая стратегия для достижения этой цели, при которой требуется как можно меньше времени?

Чувствуется, что это настоящее перетаскивание - всегда нужно помнить, чтобы установить свойство CharacterCasing для каждого. не замужем. текстовое окно. что я падаю на форму. И кажется, что DataGridViews даже не имеют простого свойства для установки; вы вручную обрабатываете события CellChanged и т. д.

Как бы вы это сделали?

Ответы [ 3 ]

1 голос
/ 14 октября 2010

Я бы предложил вам создать собственный Пользовательский элемент управления для TextBox, DataGridView и любых других элементов управления, которые вы хотите использовать для своей выгоды.

Таким образом, вы можете просто перетащить свои элементы управления в любые формы в вашем приложении.

Пример кода:

public partial class CapTextBox : UserControl
{
    public CapTextBox()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.Text = textBox1.Text.ToUpper();
        textBox1.SelectionStart = textBox1.Text.Length;
    }
}
1 голос
/ 15 октября 2010

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

Реализация UpperCaseTextBox:

public class UpperCaseTextBox : TextBox
{
    public UpperCaseTextBox()
        : base()
    {
        base.CharacterCasing = this.CharacterCasing;
    }

    private CharacterCasing _characterCasing = CharacterCasing.Upper;
    [DefaultValue(CharacterCasing.Upper)]
    public new CharacterCasing CharacterCasing
    {
        get
        {
            return _characterCasing;
        }
        set
        {
            base.CharacterCasing = value;
            _characterCasing = value;
        }
    }
}

Реализация UpperCaseDataGridView:

public class UpperCaseDataGridView : DataGridView
{
    private CharacterCasing _textBoxCharacterCasing = CharacterCasing.Upper;
    [CategoryAttribute("Behavior")]
    [DescriptionAttribute("Sets CharacterCasing of all contained TextBox controls.")]
    [DefaultValue(CharacterCasing.Upper)]
    public CharacterCasing TextBoxCharacterCasing
    {
        get
        {
            return _textBoxCharacterCasing;
        }
        set
        {
            _textBoxCharacterCasing = value;
        }
    }

    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        var txtBox = EditingControl as TextBox;
        if (txtBox != null)
            txtBox.CharacterCasing = this.TextBoxCharacterCasing;

        base.OnEditingControlShowing(e);
    }
}

Можно реализовать эту функциональность с использованием меньшего количества кода, чем указано выше, однако я намеренно стремился к гибкой, надежной реализации, которая хорошо сочетается с окном «Свойства», и позволяет мне переопределять верхний регистр в тех случаях, когда это необходимо, без необходимости отрывать элемент управления.и заменить на ванильный контроль и т. д.

Еще раз спасибо всем, кто внес свой вклад.

1 голос
/ 14 октября 2010

Лично
Я бы собрал сборку, содержащую все необходимые для приложения элементы управления (TextBoxes, DataGridViews и т. Д.), Которые были бы переопределены / настроены для получения желаемого результата (в данном случае это прописные буквы).

В этомКстати, каждый разработчик должен будет просто использовать настраиваемые элементы управления вместо .NET и менять свойства по одному.
Более того, у вас будет централизованная точка для управления поведением пользовательского интерфейса приложения.

Пример DataGridView:

public class UpperCaseDataGrid : DataGridView
{
    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        var txtBox = EditingControl as TextBox;
        if (txtBox != null)
            txtBox.CharacterCasing = CharacterCasing.Upper;

        base.OnEditingControlShowing(e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...