Как получить имя родительской формы из узла сетки свойств? С#

У меня есть сетка свойств, которая размещена на обычном winForm. В сетке свойств у меня есть узел. Внутри узла у меня есть список выпадающих элементов. Когда пользователь выбирает определенное значение, я хочу иметь возможность загрузить уже существующее диалоговое окно, которое вызывается из унаследованного метода. Мне нужно передать родительский IWin32Window в метод. Есть ли способ получить имя экземпляра родительского окна из моего свойства узла сетки свойств?

Я использую метод PromptandCreateVariable, который является частью интерфейса IDTSVariableService.

Код, который у меня есть до сих пор:

private IServiceProvider _sp = null;                            

public IServiceProvider ServiceProvider
{
    get { return _sp; }
    set { _sp = value; }


    [Category("Local Path"),
    Description("Specifies local Path")]
    public Variable LocalPath
    {
        get
        {
           //do something
           IDtsVariableService _dtsVariableService = 
               _sp.GetService(typeof(IDtsVariableService)) as IDtsVariableService;

           Variable newVariable =
               _dtsVariableService.PromptAndCreateVariable(
                   this, null, "LocalPath", "User", typeof(string));
        }
        set
        {
            //do something
        }
    }
 }

person zeencat    schedule 10.07.2012    source источник
comment
Это звучит так, как будто вам не следует делать это в геттере.   -  person SLaks    schedule 10.07.2012
comment
Узел является частью внутреннего класса в пользовательском элементе управления. Пользовательский элемент управления — это представление в сетке свойств. Я только что понял, что это должно быть внутри геттера. Я изменил это. Мне все еще нужно получить родительскую форму.   -  person zeencat    schedule 10.07.2012


Ответы (2)


Я решил эту проблему, просто создав экземпляр IWin32Window в своем классе и передав его в метод PromptAndCreateVariable.

person zeencat    schedule 11.07.2012

Если у вас есть элемент управления, вызовите Control.FindForm(), но вы также можете получить активную форму из Form.ActiveForm.

person Amiram Korach    schedule 10.07.2012