Передача переменных из основной формы в форму ввода
У меня простой вопрос. У меня есть основная форма, а затем форма запуска, из которой я могу выбрать новую 3D-модель для генерации. При выборе новой 3D-модели из формы запуска я хочу сначала проверить, была ли сохранена предыдущая модель, с которой я работал, или нет. Я просто хочу передать логическое значение из главной формы в форму запуска с помощью делегата, но я не могу получить доступ к основной форме или любой из ее переменных. Я думал, что это будет так же просто, как сказать: frmMain myForm = new frmMain (); code>, но ввод frmMain ничего не показывает в intellisense.
Есть намеки?
3 ответа
Добавьте публичную собственность в вашу основную форму
public bool IsDirty
{
get;set;
}
Вы можете получить доступ this.ParentForm.IsDirty
в вашей форме запуска,
не забудьте передать ссылку на основную форму при показе формы запуска... startupForm.showDialog(this);
Ваша основная форма недоступна для формы запуска. Вы должны сохранить ее в том месте, где вы хотите ее использовать.
Вы можете сделать это следующим образом (наряду с другими способами:)
// This class is mainly used to transfer values in between different components of the system
public class CCurrent
{
public static Boolean Saved = false;
}
убедитесь, что вы поместили этот класс в пространство имен, которое доступно для обеих форм.
Теперь в форме frmMain установите значение CCurrent.Saved и получите доступ к нему в форме запуска.
Вот мое предложение: поместите свойство объекта 3DModel в основную форму:
private Model _model;
Объявите форму запуска как диалог (например, OpenFileDialog) и сделайте что-то вроде этого:
public void OpenModel()
{
using(var frm=new StartUpForm())
{
if(frm.ShowDialog()==DialogResult.OK))
{
if(_model.IsDirty)
{
if(MessageBox.Show("Model is changed do you want to save it?","",MessageBoxButtons.YesNo")==DialogResult.Yes)
_model.Save();
_model=frm.SelectedModel;
}
}
}
}
ваша форма запуска должна иметь такой интерфейс:
public interface IStartupForm:IDisposable
{
DialogResult ShowDialog(IWin32Window parent);
Model SelectedModel{get;}
}