У меня есть 10 форм и каждая форма имеет кнопки Next и Previous. Каков наилучший подход к проявлению и закрытию форм. Мне не нужны формы, чтобы оставаться в памяти. Любые идеи?Переключение между несколькими формами окон в C#
ответ
Я бы использовал отдельную ссылку для каждого окна, которую вы можете установить на нуль, если она вам больше не понадобится. Когда нет никакой ссылки, которая указывает на объект, сборщик мусора будет называть его деструктором через некоторое время.
Если я правильно понял, у вас есть несколько окон, скажем n окон, которые выполняют свою работу в течение некоторого времени и больше не нужны. Поэтому, когда вы пишете
Window myWindow_1 = new Windowd();
Window myWindow_2 = new Windowd();
Window myWindow_3 = new Windowd();
// ...
Window myWindow_n = new Windowd();
И если вы хотите, чтобы оставить память, вы можете просто сделать
myWindow1 = null;
myWindow2 = null;
myWindow3 = null;
//...
myWindow4 = null;
В случае только эти ссылки, которые были использованы для связи с Window-объектов они будут остаются невосстановимыми призраками в памяти, и сборщик мусора удалит их через некоторое время.
Для простоты вы можете хранить все эти ссылки в массиве, чтобы не дать каждому объекту имя. Для exapmle:
Window[] myWindows = new Window[n];
for (int i=0; i<n; i++) {
myWindows[i] = new Window();
}
Надежда это помогает :)
Пример кода действительно поможет ... спасибо – McDee
Я хотел бы использовать что-то похожее на FormSwitcher:
public class FormSwitcher
{
private List<Func<Form>> constructors;
private int currentConstructor = 1;
public FormSwitcher(Func<Form> firstForm)
{
constructors = new List<Func<Form>>();
AddForm(firstForm);
}
public void AddForm(Func<Form> constructor)
{
constructors.Add(constructor);
}
public Form GetNextForm()
{
if (constructors.Count > 0 && currentConstructor >= constructors.Count)
{
currentConstructor = 0;
}
if (constructors.Count > currentConstructor)
{
return constructors[currentConstructor++]();
}
return null;
}
}
Ваша главная форма должна выглядеть следующим образом:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
new FirstForm().Show();
}
}
Вращающиеся формы могут выглядеть так:
public partial class FirstForm : Form
{
private FormSwitcher switcher;
public FirstForm()
{
InitializeComponent();
switcher = new FormSwitcher(() => new FirstForm());
switcher.AddForm(() => new SecondForm(switcher));
switcher.AddForm(() => new ThirdForm(switcher));
}
private void button1_Click(object sender, EventArgs e)
{
switcher.GetNextForm().Show();
Close();
}
}
public partial class SecondForm : Form
{
private FormSwitcher switcher;
public SecondForm(FormSwitcher switcher)
{
InitializeComponent();
this.switcher = switcher;
}
private void button1_Click(object sender, EventArgs e)
{
switcher.GetNextForm().Show();
Close();
}
}
public partial class ThirdForm : Form
{
private FormSwitcher switcher;
public ThirdForm(FormSwitcher switcher)
{
InitializeComponent();
this.switcher = switcher;
}
private void button1_Click(object sender, EventArgs e)
{
switcher.GetNextForm().Show();
Close();
}
}
ok попробует это ... какое пространство имен делает Список
Список <> - из System.Collections.Generic, Func <> из системы –
Не делайте этого. Имейте одну форму, десять пользовательских элементов управления, каждая из которых реализует интерфейс.
Как можно больше взять код из форм, все это хорошо ... Нажмите кнопку «Отметить» сейчас, иначе в следующей версии у вас будет форма 3, чтобы проверить, можете ли вы пропустите форму 2, возвращаясь в сценарий 634 крайнего случая, в то время как повторение, если вы делаете перемычки с 1, вы также можете пропустить 2, если они не отметили квадрат 14 и не поставили «Фред» в коробке 8.
Это не teeshirt, которую вы хотите носить.
- 1. Переключение между несколькими формами в C#
- 2. Связь между несколькими формами окон в C#
- 3. Переключение между несколькими формами ui в Qt
- 4. Авто Переключение между несколькими формами с таймером
- 5. C# Приложение Windows Form -> Переключение между несколькими формами
- 6. Переключение между формами
- 7. Переключение между формами
- 8. Переключение между различными формами
- 9. Значения между формами окон в C# .NET
- 10. Связь между двумя формами окон в C#
- 11. Переключение между двумя формами Windows
- 12. Переключение между формами vC++ 2010
- 13. Передача данных между формами окон
- 14. C# совместное использование класса между несколькими формами
- 15. Управление мульчированными формами окон в приложении C#
- 16. Дизайн приложений с несколькими формами окон
- 17. Разница между winforms, веб-формами и формами окон
- 18. Переключение между двумя формами в одном окне
- 19. Переключение между немодальными формами в vfp
- 20. Разделение класса между несколькими формами
- 21. Многопоточность с формами окон C#
- 22. Переключение окон Windows C++ CMD
- 23. Переключение между несколькими запусками?
- 24. Переключение между несколькими JFrames
- 25. Переключение между несколькими войнами
- 26. переключение между несколькими изображениями
- 27. Как переносить объекты между формами окон в C#
- 28. Передача данных между несколькими формами
- 29. Обработка данных между несколькими формами
- 30. C# Переключение между несколькими поставщиками .NET .NET
Я бы использовал что-то другое, кроме форм. Почему бы не изменить пользовательский интерфейс, чтобы использовать одну форму с несколькими панелями (или что-то подобное)? – webdad3
После этого будет трудно прочитать код. Это огромный проект. – McDee
@McDee - Концепция, которую вы описываете здесь, обычно называется «Мастером», и есть несколько хороших обучающих программ, которые описывают правильные реализации «Мастера». Вот один из них: http://geekswithblogs.net/jannikanker/archive/2005/03/14/55193.aspx –