C# - Привязка TextBox к целому числу

Вообще возможно использовать строку C++ на шаге 1? Если Вы используете string::reserve(size_t), можно выделить достаточно большой буфер для предотвращения нескольких выделений "кучи" при добавлении меньших строк, и затем можно просто использовать ту же самую строку C++ всюду по всем остающимся шагам.

См. эта ссылка для получения дополнительной информации об эти reserve функция.

16
задан Mike Two 30 September 2009 в 11:29
поделиться

2 ответа

Это должно быть публичное свойство экземпляра; в этом случае достаточно "this":

public int Unit {get;set;}
private void Form1_Load(object sender, EventArgs e)
{
    textBox1.DataBindings.Add("Text", this, "Unit");
}

Для двустороннего уведомления вам понадобится UnitChanged или INotifyPropertyChanged :

private int unit;
public event EventHandler UnitChanged; // or via the "Events" list
public int Unit {
    get {return unit;}
    set {
        if(value!=unit) {
            unit = value;
            EventHandler handler = UnitChanged;
            if(handler!=null) handler(this,EventArgs.Empty);
        }
    }
}

Если вы не хотите это в общедоступном API, вы можете где-нибудь обернуть его в скрытый тип:

class UnitWrapper {
    public int Unit {get;set;}
}
private UnitWrapper unit = new UnitWrapper();
private void Form1_Load(object sender, EventArgs e)
{
    textBox1.DataBindings.Add("Text", unit, "Unit");
}

Для информации, "список событий" выглядит примерно так:

    private static readonly object UnitChangedKey = new object();
    public event EventHandler UnitChanged
    {
        add {Events.AddHandler(UnitChangedKey, value);}
        remove {Events.AddHandler(UnitChangedKey, value);}
    }
    ...
    EventHandler handler = (EventHandler)Events[UnitChangedKey];
    if (handler != null) handler(this, EventArgs.Empty);
23
ответ дан 30 November 2019 в 17:27
поделиться

Вы можете использовать привязку источник (см. комментарий). Самое простое изменение:

public partial class Form1 : Form
{
    public int Unit { get; set; }
    BindingSource form1BindingSource;

    private void Form1_Load (...)
    {
        form1BindingSource.DataSource = this;
        textBox1.DataBindings.Add ("Text", form1BindingSource, "Unit");
    }
}

Однако вы получите некоторую концептуальную ясность, если немного разделите данные:

public partial class Form1 : Form
{
    class MyData {
        public int Unit { get; set; }
    }

    MyData form1Data;
    BindingSource form1BindingSource;

    private void Form1_Load (...)
    {
        form1BindingSource.DataSource = form1Data;
        textBox1.DataBindings.Add ("Text", form1BindingSource, "Unit");
    }
}

HTH. Обратите внимание, что модификаторы доступа опущены.

5
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: