Кажется, что отсутствует много кода, но вот несколько вещей ...
userBindingSource
не был подключен к userList
.
Параметры привязки propertyName
и dataMember
имеют неверный корпус.
userIndex
не определен.
Даже если бы это было так, привязка к userBindingSource[userIndex]
не позволяет перемещаться по источнику (возможно, у вас все в порядке).
Так что давайте исправим это:
public partial class Form1 : Form
{
private BindingSource userBindingSource = new BindingSource();
BindingList<user> userList = new BindingList<user>();
int userIndex = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
userBindingSource.DataSource = userList;
userIndex = userBindingSource.Position;
///some code to create textboxes dynamically....
txtName.DataBindings.Clear();
txtName.DataBindings.Add("Text", userBindingSource, "Name");
txtAge.DataBindings.Clear();
txtAge.DataBindings.Add("Text", userBindingSource, "Age");
txtGender.DataBindings.Clear();
txtGender.DataBindings.Add("Text", userBindingSource, "Gender");
txtMessage.DataBindings.Clear();
txtMessage.DataBindings.Add("Text", userBindingSource, "Message");
}
}
Предполагая, что userList
заполнено, вы можете теперь перемещаться по userBindingSource
следующим образом:
// However you're tracking userIndex, or maybe...
// userIndex = userList.IndexOf(user1);
userBindingSource.Position = userIndex;
или любому из них:
userBindingSource.MoveFirst();
userBindingSource.MovePrevious();
userBindingSource.MoveNext();
userBindingSource.MoveLast();
И, наконец, удалите бесконечное число while (true)
l oop в GetMessage
.
На этом этапе, если ваши данные правильно получены и проанализированы, ваши TextBox
элементы управления должны обновиться.
Edit ...
Итак, вы многопоточны, и это здорово.
Теперь мы должны убедиться, что все операции, которые приводят к изменению пользовательского интерфейса, выполнены правильный поток.
Позволяет сделать это (предполагая, что GetMessage
определено внутри класса Form
):
if (rec > 0)
{
var name = BitConverter.ToString(buffer, 0);
var gender = BitConverter.ToString(buffer, 80);
var age = BitConverter.ToInt32(buffer, 96);
var message = BitConverter.ToString(buffer, 160);
this.Invoke(new Action(() =>
{
user1.Name = name;
user1.Gender = gender;
user1.Age = age;
user1.Message = message;
}));
}
И это:
catch (Exception ex)
{
this.Invoke(new Action(() => MessageBox.Show(ex.ToString())));
}
И Навигация по источнику привязки (если в другом потоке):
this.Invoke(new Action(() => userBindingSource.Position = userIndex));
Вы также можете использовать метод BeginInvoke
.