📄 mainform.cs
字号:
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
private void miNew_Click(object sender, System.EventArgs e)
{
windowCount++ ;
Doc doc = new Doc("Belief Network " + windowCount.ToString());
doc.MdiParent = this;
//doc.myNodeArray.cou
IFormatter formatter = new BinaryFormatter();
string path = Application.StartupPath;
FileStream stream = new FileStream(path+"\\wy", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, doc);
stream.Close();
//currentdoc=doc;
doc.Show();
}
private void miOpen_Click(object sender, System.EventArgs e)
{
OpenFileDialog opDlg=new OpenFileDialog();
opDlg.Filter="Belief Network Format(*.xml)|*.xml|All Files(*.*)|*.*";
opDlg.FilterIndex=1;
opDlg.InitialDirectory="E:\\wy\\xml";
if(opDlg.ShowDialog()==DialogResult.OK)
{
windowCount++ ;
Doc docu = new Doc(opDlg.FileName);
this.currentdoc = docu;
docu.MdiParent = this;
NodeArray myNodeArray=new NodeArray(docu);
XmlDocument doc = new XmlDocument();
try
{
doc.Load(opDlg.FileName);
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
//建立一个xml文档存放刚打开的文件,以及一个nodearray存放当前文件的节点。
XmlElement root = doc.DocumentElement;
ArrayList name=new ArrayList();
ArrayList position=new ArrayList();
ArrayList arr_style = new ArrayList();
//int length=0;
Point from=new Point(0,0);
Point to=new Point(0,0);
string s="";
XmlNodeList xmlNodes=root.SelectNodes("/BNetNodes/*");
foreach(XmlNode node in xmlNodes)
{
name.Add(node.Name);//节点的名字编号全部存放在name里,可以只用编号解决。
xmlNodes=node.SelectNodes("POSITION");
//确定节点坐标
foreach(XmlNode node1 in xmlNodes)
{
s=node1.InnerText.ToString();
s=s.Substring(1,s.Length-2);
string[] obs=s.Split(',');
int[] pos=new Int32[obs.Length];
for(int i=0;i<obs.Length;i++)
{
pos[i]=Convert.ToInt32(obs[i]);
position.Add(pos[i]);
}
}
XmlNodeList xmlNodes2 = node.SelectNodes("style");
try
{
arr_style.Add(xmlNodes2.Item(0).InnerText);
}
catch
{
arr_style.Add("no_style");
}
}
for(int i=0;i<name.Count;i++)
{
try
{
myNodeArray.AddNewNode(Convert.ToInt32(position[2 * i].ToString()), Convert.ToInt32(position[2 * i + 1].ToString()));
myNodeArray[i].Text = name[i].ToString();
myNodeArray[i].indegree = 0;
myNodeArray[i].outdegree = 0;
myNodeArray[i].m_style = arr_style[i].ToString();
if (myNodeArray[i].m_style == "Noisy_And")
{
myNodeArray[i].BackColor = Color.DarkKhaki;
}
else if (myNodeArray[i].m_style == "Noisy_Or")
{
myNodeArray[i].BackColor = Color.OrangeRed;
}
else
{
myNodeArray[i].BackColor = Color.Yellow;
}
}
catch (Exception er)
{
statusBar1.Panels[0].Text = er.Message;
}
}
int size=name.Count;
//邻接矩阵部分,用于确定节点的连接
bool[][] adjMatrix=new bool[size][];
for(int i=0;i<size;i++)
adjMatrix[i]=new bool[size];//一个方阵,这个方阵存放着每两个节点之间是不是有一条边
//initial
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
adjMatrix[i][j]=false;//把这个方阵的值都赋值为false
int sumedge=0;
XmlNodeList xmlNodes1=root.SelectNodes("/BNetNodes/*");
foreach (XmlNode node in xmlNodes1)
{
xmlNodes1 = node.SelectNodes("Parents/*");
foreach (XmlNode xml_node in xmlNodes1)
{
adjMatrix[name.IndexOf(xml_node.Name)][name.IndexOf(node.Name)] = true;
}
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (adjMatrix[i][j] == true)//这个矩阵变量是存放节点与节点之间是否有边的
{
Line curr = new Line();//如果有边则在它们之间画一条边
curr.StartPoint = myNodeArray[i].from;
curr.EndPoint = myNodeArray[j].to;
/////////////////////////////////////////////////////////////////
myNodeArray[i].outdegree++;//这个修改打开文件时输出路径的初始化
myNodeArray[j].indegree++;//这个修改了打开文件时输入的初始化
curr.sNode = myNodeArray[i].name;
curr.dNode = myNodeArray[j].name;
////////////////////////////////////////////////////////////////
curr.DrawLine(docu);
docu.Lines.Add(curr);
}
}
}
Invalidate();
sumedge++;
docu.myNodeArray = myNodeArray;
docu.Show();
}
}
private void miExit_Click(object sender, System.EventArgs e)
{
this.misave.PerformClick();
this.Close();
}
private void miToolBar_Click(object sender, System.EventArgs e)//toolbar对话框是否显示
{
if(this.miToolBar.Checked)
{
this.toolStrip1.Dock=DockStyle.None;
this.toolStrip1.Hide();
this.miToolBar.Checked=false;
}
else
{
this.toolStrip1.Dock=DockStyle.Top;
this.toolStrip1.Show();
this.miToolBar.Checked=true;
}
}
private void miStatusBar_Click(object sender, System.EventArgs e)//statusbar是否显示
{
if(this.miStatusBar.Checked)
{
this.statusBar1.Dock=DockStyle.None;
this.statusBar1.Hide();
this.miStatusBar.Checked=false;
}
else
{
this.statusBar1.Dock=DockStyle.Bottom;
this.statusBar1.Show();
this.miStatusBar.Checked=true;
}
}
private void miAbout_Click(object sender, System.EventArgs e)
{
MessageBox.Show("贝叶斯网络参数学习!");
}
private void MainForm_MdiChildActivate(object sender, System.EventArgs e)
{
if (null == this.ActiveMdiChild)
{
statusBar1.Text = "";
}
else
{
statusBar1.Text = this.ActiveMdiChild.Text;
}
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
this.miNew.PerformClick();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
this.miOpen.PerformClick();
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
this.misave.PerformClick();
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
this.helptopic.PerformClick();
}
private void helptopic_Click(object sender, EventArgs e)
{
MessageBox.Show("如果您已经建好了一个贝叶斯网络,请打开。\n\r 否则请新建一个贝叶斯网络进行参数学习!");
}
private void misave_Click(object sender, EventArgs e)
{
SaveFileDialog sfDlg = new SaveFileDialog();
sfDlg.Filter = "Belief Network Format(*.xml)|*.xml|All Files(*.*)|*.*";
sfDlg.FilterIndex = 1;
sfDlg.DefaultExt = "xml";
sfDlg.AddExtension = true;
sfDlg.RestoreDirectory = true;
sfDlg.InitialDirectory = "E:\\wy\\xml";
if (sfDlg.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("已经保存!");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -