在我上一篇文章基礎上,進行改進,現在很多登陸器沒有多開的功能,那麼用匹配號刷的話就很麻煩,能否只打開一個登陸器,就能夠切換不同的小號,而且他們都沒有延遲呢?
然後我想到了用c#的反射。
1.創建主窗體,設置控件
首先在主窗體加上labControl控件。
每個控件對應的屬性名如下:
然後設置tabContral1的事件:
找到位置,雙擊右邊空白的地方就行,弄完後,就有了下面的回調函數。
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
然後設置每個tabpage的tag:
每個page的tag最後的數字和page的數字一致:
以上全部設計完之後,雙擊主窗體,你就進到了寫代碼的部分。
2.寫代碼
你們的程序名字如果和我的SeerLuncher不一樣的話,一定有bug。
那是因爲你沒改這個,下面的程序引號裏面第一個單詞必須和你的項目名字一致。
string formClass = "SeerLauncher.Form1";
不多說了,直接放代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Windows.Forms;
namespace SeerLauncher
{
public partial class FormMainMenu : Form
{
public FormMainMenu()
{
InitializeComponent();
}
public int[] s = { 0, 0 , 0 , 0 , 0 , 0};//用來記錄窗體是否打開過
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (s[tabControl1.SelectedIndex] == 0)
{
btnX_Click(sender, e);
}
}
private void FormMainMenu_Load(object sender, EventArgs e)
{
string formClass = "SeerLauncher.Form1";
GenerateForm(formClass, tabControl1);
}
public void GenerateForm(string form, object sender)
{
//反射生成窗體
Form fm = (Form)Assembly.GetExecutingAssembly().CreateInstance(form);
//設置窗體沒有邊框,加入到選項卡中
fm.FormBorderStyle = FormBorderStyle.None;
fm.TopLevel = false;
fm.Parent = ((TabControl)sender).SelectedTab;
fm.ControlBox = false;
fm.Dock = DockStyle.Fill;
fm.Show();
s[((TabControl)sender).SelectedIndex] = 1;
}
private void btnX_Click(object sender, EventArgs e)
{
string formClass = ((TabControl)sender).SelectedTab.Tag.ToString();
GenerateForm(formClass, sender);
}
}
}
3.寫其他窗體
看我這篇文章:
https://jiangyiming.blog.csdn.net/article/details/106978095
每個form都按照上面那個文章那樣寫,然後就大功告成了。
4.最終效果:
下圖是小號1:
下圖是小號3:
他們運行時候互不干擾,不會說我這邊打開一個,那另一個就卡住了。
另一個也在讀秒,他們都是實時的。
你和小號打匹配的整體效果就相當於你和別的人打匹配。
十分流暢。
毫不誇張地說,比瀏覽器開多個頁面流暢至少十倍。而且自動清緩存也不會崩潰。