假设某个程序员递给我一个编译程序,没有源代码,它做了一些事情,但没有图形表示它的作用。然而,它确实提供了轻松添加它的能力。但是程序员如何让人们与编译程序中的事物进行交互呢?
这个演示程序只是简单地生成一个随机数,具有最大值,然后触发一个事件,该事件应该向想要在他们自己的程序中使用这些数据的人公开发生的事情。
public delegate void MadeRandomEventHandler(int previous,int current,int max);
class MakeRandom
{
private static int current = 350;
private static int max = 350;
public static event MadeRandomEventHandler MadeRandomEvent;
public static void dowork()
{
int curCopy = current;
Random random = new Random();
current = random.Next(0, max+1);
fireMadeRandomEvent(curCopy,current,max);
}
private static void fireMadeRandomEvent(int previous, int current, int max)
{
if (MadeRandomEvent != null)
MadeRandomEvent(previous,current,max);
}
}
当然还有一个带有按钮的表单来调用 dowork()
public partial class Form_Main : Form
{
public Form_Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MakeRandom.dowork();
}
}
所以现在我要做的就是创建一个向我展示发生了什么的 mod,创建一个带有进度条的新表单并处理 MakeRandom 类触发的事件。
表格:
public partial class Form_Mod : Form
{
public static Form_Mod frm;
public Form_Mod()
{
InitializeComponent();
}
private void Form_Mod_Load(object sender, EventArgs e)
{
frm = this;
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
}
public void updateProgress(int percent)
{
progressBar1.Value = percent;
}
}
和事件处理:
class Mod_HandleEvents
{
public static void attach()
{
MakeRandom.MadeRandomEvent += new MadeRandomEventHandler(RandomChange);
}
public static void detach()
{
MakeRandom.MadeRandomEvent -= new MadeRandomEventHandler(RandomChange);
}
private static void RandomChange(int previous, int current, int max)
{
float percent1 = (float)current / (float)max;
int percent = (int)(percent1 * 100);
Form_Mod frm = Form_Mod.frm;
frm.updateProgress(percent);
}
}
但是如何将这段代码添加到我提供的程序中?我没有源代码,所以我不能添加它然后重新编译。我见过几个似乎可以即时编译 .cs 文件的程序,而这些 .cs 文件似乎与主程序交互。我该怎么做呢?
而且我可能必须在主表单中添加另一个按钮才能真正打开我的“Form_Mod”表单。所以把主程序交给我的程序员必须提供一种方法来做到这一点,对吧?还是有其他方法?
private void button2_Click(object sender, EventArgs e)
{
Form_Mod frm = new Form_Mod();
Mod_HandleEvents.attach();
frm.Show();
}