How to Get all Forms and Open Form with Form Name in C#
By FoxLearn 11/28/2024 2:30:23 PM 11.09K
In this article, we'll create a simple AppForm
class to map data for various forms, and demonstrate how you can use this data to dynamically load and display forms from a ComboBox selection.
How to Dynamically Retrieve and Open Forms by Name in C#?
Open Viual Studio, then click New Project, then select Visual C# on the left, then Windows and then select Windows Forms Application. Name your project "DynamicOpenForm" and then click OK
Next, Design your form as shown below.
You can create an empty Form2, Form3, Form4 to play demo
Create an AppForm to map data
public class AppForm { public string Id { get; set; } public string FormName { get; set; } }
The AppForm
class will be a simple data model to store the form's identifier (Id
) and name (FormName
). This class is used to map the forms available in the application.
We'll create a Windows Forms application that allows users to select a form from a ComboBox, and then open the selected form dynamically at runtime.
Here's the implementation of the Form1
class.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DynamicOpenForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Event handler to initialize the form when it's loaded private void Form1_Load(object sender, EventArgs e) { // Initialize the list of AppForm objects List<AppForm> list = new List<AppForm>(); // Get the base form type Type formType = typeof(Form); // Loop through all types in the current assembly foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) { // If the type is a form, add it to the list if (formType.IsAssignableFrom(t)) list.Add(new AppForm() { Id = t.FullName, FormName = t.Name }); } // Initialize ComboBox with the list of AppForms cboFormName.DataSource = list; cboFormName.ValueMember = "Id"; cboFormName.DisplayMember = "FormName"; } // Event handler to open the selected form when the button is clicked private void btnOpen_Click(object sender, EventArgs e) { // Get the selected AppForm object AppForm obj = cboFormName.SelectedItem as AppForm; // If the object is valid, create and open the form dynamically if (obj != null) { Type t = Type.GetType(obj.Id); if (t != null) { // Create a new instance of the selected form Form frm = Activator.CreateInstance(t) as Form; if (frm != null) frm.ShowDialog(); } } } } }
We initialize a list of AppForm
objects. Each object represents a form in the application with its Id
and FormName.
Using Assembly.GetExecutingAssembly().GetTypes()
, we loop through all types in the current assembly and check if they are subclasses of Form
using formType.IsAssignableFrom(t)
.
We bind the list of AppForm
objects to the ComboBox (cboFormName
), setting the ValueMember
to Id
and the DisplayMember
to FormName.
When the "Open" button is clicked (btnOpen_Click
), we get the selected AppForm
from the ComboBox, use Type.GetType()
to get the corresponding Type
object, and create a new instance of the selected form using Activator.CreateInstance()
.
VIDEO TUTORIAL
- How to Print Text in a Windows Form Application Using C#
- How to fill ComboBox and DataGridView automatically in C#
- How to Read text file and Sort list in C#
- How to pass ListView row data into another Form in C#
- How to read and write to text file in C#
- How to make a Countdown Timer in C#
- How to Display selected Row from DataGridView to TextBox in C#
- How to Get Checked Items In a CheckedListBox in C#