📄 复件 formmain.cs
字号:
GAThread.Start();
}
private void menuGASuspend_Click(object sender, System.EventArgs e)
{
GAThread.Suspend();
}
private void menuGAResume_Click(object sender, System.EventArgs e)
{
GAThread.Resume();
}
private void menuAbortCurrentSample_Click(object sender, System.EventArgs e)
{
menuAbortCurrentSample.Checked^=true;
}
private void menuAbortAllSamples_Click(object sender, System.EventArgs e)
{
menuAbortAllSamples.Checked^=true;
}
private void menuGAAbort_Click(object sender, System.EventArgs e)
{
GAThread.Abort();
}
void ShowTable(DataTable table)
{
TabPage page=null;
TabControl control=null;
myGridCtrl grid=null;
if(table ==ExamTable)
grid=examdg;
else if(table==ParamTable || table==SampleTable)
grid=cridg;
else if(table==ResultTable)
grid=resultdg;
page=grid.Parent as TabPage;
control=page.Parent as TabControl;
control.SelectedTab=page;
grid.DataMember=table.TableName;
return;
}
#region attributes for convenience
public DataTable ExamTable
{
get
{
return examdg.ExamTable;
}
set
{
examdg.ExamTable=value;
}
}
public DataTable ParamTable
{
get
{
return cridg.ParamTable;
}
set
{
cridg.ParamTable=value;
}
}
public DataTable SampleTable
{
get
{
return cridg.SampleTable;
}
set
{
cridg.SampleTable=value;
}
}
public DataTable ResultTable
{
get
{
return resultdg.ResultTable;
}
set
{
resultdg.ResultTable=value;
}
}
public myExamDataSet ExamSet
{
get
{
return examdg.ExamSet;
}
set
{
examdg.ExamSet=value;
}
}
public myCriDataSet CriSet
{
get
{
return cridg.CriSet;
}
set
{
cridg.CriSet=value;
}
}
public myResultDataSet ResultSet
{
get
{
return resultdg.ResultSet;
}
set
{
resultdg.ResultSet=null;
}
}
public DataViewSetting ResultView
{
get
{
return resultdg.ResultView;
}
}
public myTemplateDataSet TemplateSet
{
get
{
return templatedg.TemplateSet;
}
set
{
templatedg.TemplateSet=null;
}
}
public DataViewSetting TemplateView
{
get
{
return templatedg.TemplateView;
}
}
public DataViewSetting ExamView
{
get
{
return examdg.ExamView;
}
}
public DataViewSetting ParamView
{
get
{
return cridg.ParamView;
}
}
public DataViewSetting SampleView
{
get
{
return cridg.SampleView;
}
}
#endregion
unsafe private void outputInfo(byte* s,int l)
{
string s2output="";
for(int i=0;i<l;i++)
s2output+=(char)s[i];
output.Text+=s2output+"\r\n";
}
unsafe private bool Match( DataRow rawData,DataRow template,DataRow Templatemin,DataRow Templatemax,int bitstoignore)
{
bool ma;
fixed(byte *s=new byte[16]) {
foreach(DataColumn col in template.Table.Columns)
{
try
{
if(rawData.Table.Columns[col.ColumnName]==null)
continue;
if(!myDataset.IsTemplateGene(col))
continue;
if(!myDataset.IsCriField(rawData.Table.Columns[col.ColumnName]))
continue;
if(rawData[col.ColumnName]==null)
continue;
if(template[col].GetType()==typeof(DBNull))
continue;
if(rawData[col.ColumnName].GetType()==typeof(DBNull))
continue;
float d=Convert.ToSingle(rawData[col.ColumnName]);
string strTemplate=template[col].ToString();
float min=Convert.ToSingle(Templatemin[col.ColumnName]);
float max=Convert.ToSingle(Templatemax[col.ColumnName]);
ma=MatchField(d,min,max,strTemplate,bitstoignore);
if(!ma)
return false;
}
catch(Exception e)
{
throw e;
}
}//end foreach
}//end fixed
return true;
}
unsafe private bool MatchField(float datafield,float min,float max,string templatefield,int bitstoignore)
{
bool ma=true;
int length=templatefield.Length;
fixed(byte *s=new byte[length])
{
SimpleGA.Encoder.dobin(datafield,s,Convert.ToUInt16(length),min,max);
for(int i=0;i<templatefield.Length-bitstoignore;i++)
{
char c=templatefield[i];
char b=Convert.ToChar(s[i]);
if(c!=b && c!='#' && b!='#')
ma=false;
if(!ma)
return false;
}//end for
}//end fixed
return true;
}
private void templatereasonsetting_Click(object sender, System.EventArgs e)
{
if(dlgTemplateReasonSetting.ShowDialog()==DialogResult.OK)
{
}
}
private void templateReason_Click(object sender, System.EventArgs e)
{
int idData;
bool suc;
DataGridCell myDataGridCell = examdg.CurrentCell;
BindingManagerBase bm = BindingContext[examdg.DataSource, examdg.DataMember];
for(int i=0;i<bm.Count;i++)
{
if(!examdg.IsSelected(i))
continue;
examdg.CurrentCell = new DataGridCell(i,1);
DataRowView drv = (DataRowView) bm.Current;
idData=Convert.ToInt16(drv["序号"]);
output.Text+="对样品 "+ Convert.ToString(idData)+" 进行判断:\r\n";
output.Update();
suc=TemplateReason(idData);
if(!suc)
{
output.Text+="\t模板库不能对此样品做出判断!\r\n";
output.Update();
}
}
}//end function
private bool TemplateReason(int idData)
{
bool ma=false;
for(int i=0;i<=Convert.ToInt16(dlgTemplateReasonSetting.bittoignore.Text);i++)
{
output.Text+="\t忽略参数基因后"+Convert.ToString(i)+"位进行推理......\r\n";
output.Update();
ma=TemplateReason(idData,i);
if(ma)
return true;
}//end for
return false;
}
private void FormMain_Resize(object sender, System.EventArgs e)
{
if(splitter1.SplitPosition>this.Width)
splitter1.SplitPosition=this.Width*4/5;
}
private bool TemplateReason(int idData,int bitstoignore)
{
bool ma;
int idTemp;
foreach(DataRow dr in TemplateSet.TemplateTable.Rows)
{
idTemp=Convert.ToInt16(dr["序号"]);
ma=TemplateReason(idTemp,idData,bitstoignore);
if(ma)
{
output.Text+="\t"+Convert.ToString(idTemp)+"\t 匹配成功"
+ "\t结论为:"+Convert.ToString(dr["结论"])+"\r\n";
return true;
}
}//end foreach
return false;
}//end function
private bool TemplateReason(int idTemp,int idData,int bitstoignore)
{
string filterTemp="序号="+idTemp;
string filterData="序号="+idData;
DataRow[] drTemplate=TemplateSet.TemplateTable.Select(filterTemp);
DataRow[] drTemplateMax=TemplateSet.TemplateMaxTable.Select(filterTemp);
DataRow[] drTemplateMin=TemplateSet.TemplateMinTable.Select(filterTemp);
DataRow[] drData=ExamTable.Select(filterData);
if(drTemplate.Length<=0)
return false;
if(drData.Length<=0)
return false;
if(drTemplateMin.Length<=0)
return false;
if(drTemplateMax.Length<=0)
return false;
bool b=Match(drData[0],drTemplate[0],drTemplateMin[0],drTemplateMax[0],bitstoignore);
return b;
}//enf fuction
}//end class FormMain
}//end namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -