У меня есть две формы окон Form1
и Form2
и библиотека классов C# CLProduct
.Отключение доступа к форме при открытии новой формы из библиотеки классов C#
Теперь Form1
уже открыт и метод в CLProduct
класса называется, который показывает Form2
и в этот момент я хотел бы, чтобы ограничить доступ к Form1
до Form2
закрыт.
У меня есть следующий код в моем методе в CLProduct, которые загружаются
var _frm2= new Form2();
_frm2.ShowDialog();
Я знаю, что ShowDialog
загружает модальной, который по умолчанию ограничивает доступ к Form1, когда ShowDialog
вызывается из Form1, но в моем случае ShowDialog
является на самом деле вызывается из класса, который по понятным причинам, не ограничивающими Form1
, поскольку она не вызывается из Form1
Form2 работает на рабочем потоке, который создан в Form1 следующим
if (pPBackgroundWorker.IsBusy == false)
{
// Start the asynchronous operation.
pPBackgroundWorker.RunWorkerAsync();
}
Есть ли способ справиться с этим с Form1_Load()
?
Вы являетесь автором 'CLProduct'? Возможно, я ошибаюсь, но я думаю, что есть возможность передать «форму» в другую «форму», чтобы можно было подумать о других ее родителях и о желаемом поведении. Но вам нужно будет изменить способ создания формы Form2 в примере выше. // Посмотрите на 'ShowDialog (это)' где 'this' является ссылкой на ваш« текущий »пользовательский интерфейс. – KDecker
Если вы не являетесь автором 'CLProduct', вам, возможно, придется сделать небольшой« трюк », так сказать. Создайте еще одну 'Form' в' Form1', которая ничего не делает, покажет ее с помощью ShowDialog, так что это блокирует 'Form1' в то же время покажет' Form2', как вы сейчас. Если вы можете определить, когда 'Form2' был закрыт, вы можете закрыть новую' Form', а затем снова разрешить пользователю доступ к Form1. – KDecker
В общем, ShowDialog() не имеет проблем с поиском окна владельца для диалога, если вы не используете перегрузку ShowDialog (владельца). Хотя достаточно легко придумать один, Application.OpenForms [0] обычно хорош. Crystal Ball говорит, что код работает на рабочем потоке. Это довольно серьезная проблема, которую нужно исправить, побочные эффекты могут быть очень неприятными. Используйте окно Debug> Windows> Threads отладчика для проверки. –