2016-11-21 5 views
0

У меня есть класс BaseControl, который делает все, что мне нужно для элементов управления..Net UserControl, реализующий методы Show и ShowDialog

Удобно для меня использовать метод void Show и DialogResult ShowDialog из моего контроля.

UPDATE это для удобства я использую мой BaseControls повсюду и, в некоторых случаях, я хочу possibilit показать (шоу-диалог) их самым простым из возможных кода ...

Здесь это код метода ShowDialog, метод Show быть очень похожи:

Form ContainingForm = null; 
public DialogResult ShowDialog(string title, Control parent) { 
    ContainingForm = new Form(); 
    this.Dock = DockStyle.Fill; 
    ContainingForm.Controls.Add(this); 
    ContainingForm.Text = title; 
    // 
    DialogResult res = ContainingForm.ShowDialog(); 
    ContainingForm.Close(); 
    return res; 
} 

private void Close(DialogResult result) { 
    if (ContainingForm != null) { 
    ContainingForm.DialogResult = result; 
    // original code: form is not closing... 
    // ContainingForm.Close(); 
    } 
} 
// button on BaseControl closing the control 
protected void Button_Click(object sender, EventArgs e) { 
    this.Close(DialogResult.OK); 
} 

Я попробовал подход, предложенный в this post, отсюда Close в методе ShowDialog. Как в исходной версии, так и в пересмотренной версии с использованием вышеприведенного сообщения окно не закрывается.

Я прочитал об отправке сообщения «Закрыть» в ContainingForm, но с помощью Invoke тоже не работал.

Также я должен ожидать некоторые другие проблемы при использовании Show вместо ShowDialog, так как форма не блокирует поток пользовательского интерфейса?

Любой, кто знает ответ на этот вопрос?

+0

чем проблема с 'form' который сделал вам попробовать что-то вроде этого? –

+0

Класс Form не имеет параметризованного конструктора, поэтому он ясно говорит о том, что здесь происходит: 'ContainingForm = new Form (parent);' – LarsTech

+0

Наследование для совместимости с проектами без winforms ... – neggenbe

ответ

0

Как выясняется, следующий код, кажется, работает:

private void Close(DialogResult result) { 
    if (ContainingForm != null) { 
    ContainingForm.DialogResult = result; 
    ContainingForm.Close(); 
    ContainingForm.Dispose(); 
    } 
}