Как найти какой объект привязан к текстовому полю winform - PullRequest
1 голос
/ 21 июня 2011

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

Я использую Windows.Forms.TextBox. У меня есть DataBinding-Text, связанный с любым полем имени объекта. Это делается во время разработки. В коде мне нужно выяснить, что это за объект, который связан с этим TextBox.

Ответы [ 5 ]

1 голос
/ 26 сентября 2013

На всякий случай, кому-то еще нужно знать это: textBox1.DataBindings("Text").BindingMemberInfo.BindingField
Тим

1 голос
/ 21 июня 2011

Попробуйте запросить свойство DataBindings текстового поля во время выполнения.

1 голос
/ 21 июня 2011

В вашем коде во время выполнения, предполагая, что вашим связанным объектом является некоторый объект MyObject:

if (textBox1.DataBindings.Count == 1)
{
   var myObj = textBox1.DataBindings[0].DataSource as MyObject;

   if (myObj != null)
      // do something with the bound object
   else
      // well, found data bound object but it was not a MyObject... Handle as appropriate
}

Надеюсь, это поможет.

0 голосов
/ 01 июня 2017

Запрос DataBindings текстового поля. DataSource из Binding может содержать разные вещи:

  • A Type объект, описывающий тип объекта, к которому может быть привязано свойство. Это может быть в том случае, если форма загружается и объект еще не прикреплен.
  • A BindingSource. В этом случае мы должны запросить DataSource этого источника привязки.
  • Объект данных или null.

В случае, если у нас есть BindingSource, мы можем снова иметь Type объект. Чтобы получить тип объекта, с которым должна связываться привязка, я написал этот вспомогательный метод, который вызывает себя рекурсивно. (с использованием синтаксиса C # 7.0)

private Type GetBoundType(object dataSource)
{
    switch (dataSource) {
        case Type type:
            return type;
        case BindingSource bindingSource:
            return GetBoundType(bindingSource.DataSource);
        default:
            return dataSource?.GetType();
    }
}

Вы можете назвать это так (используя синтаксис C # 7.0) :

Binding binding = textBox.DataBindings["Text"];
if (binding != null && GetBoundType(binding.DataSource) == expectedType) {
    ...
}

Если вы знаете, что реальный объект данных был связан с источником данных, вы можете получить его с помощью:

object entity = binding.DataSource is BindingSource bs ? bs.DataSource : binding.DataSource;
0 голосов
/ 21 июня 2011

Хранится ли объект в теге текстового поля?

object o = textbox.Tag;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...