Предполагая, что вы открываете форму ContainerInquiry
из формы ReadBarCodeInMenu
, вы можете сделать следующее. В форме ContainerInquiry
добавьте параметр в конструктор, приняв ссылку на первую форму
private ReadBarCodeInMenu _readBarCodeInMenu;
public ContainerInquiry(ReadBarCodeInMenu readBarCodeInMenu)
{
InitializeComponent();
_readBarCodeInMenu = readBarCodeInMenu;
}
private void logoutBtn_Click(object sender, EventArgs e)
{
_readBarCodeInMenu.btnContainerInquiry.Enabled = true;
}
Также измените доступность btnContainerInquiry
с private
на internal
(или public
).
Тогда в форме ReadBarCodeInMenu
// Pass a reference of ReadBarCodeInMenu to ContainerInquiry.
var frm = new ContainerInquiry(this);
...
Вы не можете получить доступ к пользовательскому интерфейсу из другого потока, кроме потока пользовательского интерфейса. Если вы попытаетесь это сделать, вы получите исключение
Операция с несколькими потоками недопустима: элемент управления 'btnContainerInquiry' доступен из потока, отличного от потока, в котором он был создан.
В этом случае вы должны вызвать элемент управления или форму, к которой вы обращаетесь. Этот механизм передает делегат нужному потоку и выполняет его там.
var btn = _readBarCodeInMenu.btnContainerInquiry;
if (btn.InvokeRequired) {
btn.Invoke(new Action(() => btn.Enabled = true));
} else {
btn.Enabled = true;
}
Вы также можете создать метод расширения, который автоматизирует этот процесс, как показано здесь: https://stackoverflow.com/a/12179408/880990