Вообще возможно использовать строку C++ на шаге 1? Если Вы используете string::reserve(size_t)
, можно выделить достаточно большой буфер для предотвращения нескольких выделений "кучи" при добавлении меньших строк, и затем можно просто использовать ту же самую строку C++ всюду по всем остающимся шагам.
См. эта ссылка для получения дополнительной информации об эти reserve
функция.
Это должно быть публичное свойство экземпляра; в этом случае достаточно "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);
Вы можете использовать привязку источник (см. комментарий). Самое простое изменение:
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. Обратите внимание, что модификаторы доступа опущены.