用C#实现的两个试验编程(txt文本数据的导入,和数据导出为TXT)
1. 文件的存取
数据文件1.txt为学生成绩统计表,要对它做一个统计工作。文件中若一个人有多个成绩,则取他们的最好成绩来统计,然后计算全班平均成绩;统计0-69、70-79、80-89、90-100分的人数;若不要85分以下的成绩,求一下平均成绩是多少;将学生名字和成绩另存为一个文件2.txt,注意,多个成绩取最好一个保存。
说明:1.txt的格式是这样的:序号 学号 姓名 选修/必修 成绩
设计数据库:如图
其实在设计数据库时候应该让StudentScore为int字段,我设计成了string类型的,所以在后面的统计部分需要将某些字段转换为int,使用Convert(int,数据库字段名)
第一步,新建一个项目SAMSys
新建一个SqlHelp.cs的类,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace SAMSys { static class SqlHelper //只在DAL层调用,所以设置为static { //每个实例都需要查看是否修改连接字符串 private static string connStr = ConfigurationManager.ConnectionStrings["dbStudentScoreStr"].ConnectionString; //封装方法的原则是:把不变的放到方法里,变化的方法参数中 public static int ExecuteNonQuery(string sql) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; return cmd.ExecuteNonQuery(); } } } public static void ExecuteNonQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; return cmd.ExecuteScalar(); } } } public static DataSet ExecuteDataSet(string sql) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet dataset = new DataSet(); adapter.Fill(dataset); return dataset; } } } public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); return ds.Tables[0]; } } } public static object FromDbValue(object value) { if (value == DBNull.Value) { return null; } else { return value; } } public static object ToDbValue(object value)//private是类内部的方法,现在需要变成公用的,所以修改private为public { if (value == null) { return DBNull.Value; } else { return value; } } } }
新建一个Student的类,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SAMSys { public class Student { public int Id { get; set; } public string StudentId { get; set; } public string StudentName { get; set; } public string Category { get; set; } public string StudentScore { get; set; } } }
新建一个StudentADL的类,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace SAMSys { public class StudentDAL { public Student ToStudent(DataRow row) { Student student = new Student(); student.Id = Convert.ToInt32(row["Id"]); student.StudentId = (string)row["StudentId"]; student.StudentName = (string)row["StudentName"]; student.StudentScore = (string)row["StudentScore"]; student.Category=(string)row["Category"]; return student; } //显示所有 public Student[] ListAll() { DataTable dt = SqlHelper.ExecuteDataTable("Select * from T_StudentScores"); Student[] students = new Student[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { students[i] = ToStudent(dt.Rows[i]); } return students; } /// <summary> /// 筛选学生分数 /// </summary> /// <returns></returns> public Student[] ListStudentMaxScore() { // DataTable view = SqlHelper.ExecuteDataTable("CREATE VIEW temp AS select StudentId, MAX(StudentScore) as M_Score from T_StudentScores group by StudentId"); DataTable dt = SqlHelper.ExecuteDataTable(@"select * from T_StudentScores inner join temp on temp.StudentId=T_StudentScores.StudentId and T_StudentScores.StudentScore=temp.M_Score"); Student[] students = new Student[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { students[i] = ToStudent(dt.Rows[i]); } return students; } //筛选分数的人 public int Count0() { int Number0 =(int) SqlHelper.ExecuteScalar("select count(*) from temp where M_Score<=69"); return Number0; } public int Count7() { int Number7 = (int)SqlHelper.ExecuteScalar("select count(*) from temp where M_Score>=70 and M_Score<=79"); return Number7; } public int Count8() { int Number8 = (int)SqlHelper.ExecuteScalar("select count(*) from temp where M_Score>=80 and M_Score<=89"); return Number8; } public int Count9() { int Number9 = (int)SqlHelper.ExecuteScalar("select count(*) from temp where M_Score>=90 and M_Score<=99"); return Number9; } public int AveScort() { int avgScore = (int)SqlHelper.ExecuteScalar("select avg(Convert(int,M_Score)) from temp"); return avgScore; } public int AveScore1() { int avgScore1 = (int) SqlHelper.ExecuteScalar("select avg(Convert(int,M_Score)) from temp where Convert(int,M_Score)>=85"); return avgScore1; } } }
新建一个程序的配置文件,App.config,连接数据库的字符串添加进去,代码如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="dbStudentScoreStr" connectionString="Data Source=.; Initial Catalog=SAMSYSDB;Trusted_Connection=yes"/> </connectionStrings> </configuration>
MainWindow.x
<Window x:Class="SAMSys.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen" > <Grid> <Button Content="导入文本格式的学生成绩表" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="btnImport" VerticalAlignment="Top" Width="165" Click="btnImport_Click" /> <Button Content="显示全部数据查看是否导入成功" Height="23" HorizontalAlignment="Right" Margin="0,12,64,0" Name="btnShowAll" VerticalAlignment="Top" Width="218" Click="btnShowAll_Click" /> <Button Content="统计显示学生的成绩(显示最高成绩)" Height="23" HorizontalAlignment="Left" Margin="12,61,0,0" Name="btnScore" VerticalAlignment="Top" Width="118" Click="btnScore_Click" /> <Button Content="区间统计人数" Height="23" HorizontalAlignment="Left" Margin="185,61,0,0" Name="button1" VerticalAlignment="Top" Width="133" Click="button1_Click" /> </Grid> </Window>
为按钮“导入文本格式的学生成绩表”,即btnImport添加Click事件。代码如下:
/// <summary> /// 导入数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnImport_Click(object sender, RoutedEventArgs e) { string connStr = ConfigurationManager.ConnectionStrings["dbStudentScoreStr"].ConnectionString; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if (ofd.ShowDialog() == false) { return; } string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray(); DataTable table = new DataTable(); table.Columns.Add("Id"); table.Columns.Add("StudentId"); table.Columns.Add("StudentName"); table.Columns.Add("Category"); table.Columns.Add("StudentScore"); //查看文件的编码格式,可以在文件->另存为->编码中查看,若是ANSI使用参数DEFAULT编码即可, //若是UTF-8不使用参数,或是指定UTF-8即可 //使用如下的方式将其变成string数组 for (int i = 1; i < lines.Count(); i++) { string line = lines[i]; //注意文件里是按制表符来分割的,不是字符串 string[] strs = line.Split('\t');//‘\t’为制表符 int id = Convert.ToInt32(strs[0]); string studentId = strs[1]; string studentName = strs[2]; string category = strs[3]; string studentScore = strs[4]; DataRow row = table.NewRow();//创建一个DataRow对象 row["Id"] = id;//一定要在一开始创建table.Columns添加列 row["StudentId"] = studentId; row["StudentName"] = studentName; row["Category"] = category; row["StudentScore"] = studentScore; table.Rows.Add(row);//NewRow只是创建,没有插入 } using (SqlBulkCopy bulkCope = new SqlBulkCopy(connStr)) { bulkCope.DestinationTableName = "T_StudentScores"; //添加dataTable中列名与数据库表中列名的映射 bulkCope.ColumnMappings.Add("Id", "Id"); bulkCope.ColumnMappings.Add("StudentId", "StudentId"); bulkCope.ColumnMappings.Add("StudentName", "StudentName");//dataTable中与数据库表的对应关系(datatable中的名字,数据库中的名字) bulkCope.ColumnMappings.Add("Category", "Category"); bulkCope.ColumnMappings.Add("StudentScore", "StudentScore"); bulkCope.WriteToServer(table); } MessageBox.Show("导入成功"); }
再次新建一个StudentScoreShow.xaml,设计的代码如下:
<Window x:Class="SAMSys.StudentScoreShow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="StudentScoreShow" Height="600" Width="800" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Loaded="Window_Loaded"> <Grid Name="gridStudentScore" > <DockPanel Height="400" HorizontalAlignment="Left" Margin="0,9,0,0" Name="dockPanel1" VerticalAlignment="Top" > <DataGrid DockPanel.Dock="Top" IsReadOnly="True" Name="dgStudent" AutoGenerateColumns="False" Width="681"> <DataGrid.Columns> <DataGridTextColumn Header="序号" Binding="{Binding Id}" Width="100"></DataGridTextColumn> <DataGridTextColumn Header="学号" Binding="{Binding StudentId}" Width="100"></DataGridTextColumn> <DataGridTextColumn Header="姓名" Binding="{Binding StudentName}" Width="100"></DataGridTextColumn> <DataGridTextColumn Header="类别" Binding="{Binding Category}" Width="150"></DataGridTextColumn> <DataGridTextColumn Header="成绩" Binding="{Binding StudentScore}" Width="100"></DataGridTextColumn> </DataGrid.Columns> </DataGrid> </DockPanel> <Button Content="导出学生成绩(显示最高成绩)" Height="23" Name="btnOutput" Width="75" Click="btnOutput_Click" Margin="12,423,691,115" /> </Grid> </Window>
为显示全部数据查看是否导入成功的按钮添加Click事件即按钮btnShowAll
private void btnShowAll_Click(object sender, RoutedEventArgs e) { StudentScoreShow scoreShow = new StudentScoreShow(); scoreShow.IsAll = true; scoreShow.ShowDialog(); }
为统计的学生成绩,即如有两个成绩,则显示高成绩统计,就是按钮btnScore添加事件,代码如下:
private void btnScore_Click(object sender, RoutedEventArgs e) { StudentScoreShow scoreShow = new StudentScoreShow(); scoreShow.IsSelect = true; scoreShow.ShowDialog(); }
为区间统计成绩的按钮添加Click事件,代码如下:
private void button1_Click(object sender, RoutedEventArgs e) { StatisticsNumber sn = new StatisticsNumber(); sn.ShowDialog(); }
同时新建一个窗体StatisticsNumber.xaml,设计和代码如下:
<Window x:Class="SAMSys.StatisticsNumber" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="学生统计" Height="500" Width="500" Loaded="Window_Loaded"> <Grid> <TextBlock Height="23" HorizontalAlignment="Left" Margin="101,143,0,0" Name="textBlock1" Text="0-69" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="186,143,0,0" Name="txt0" VerticalAlignment="Top" Width="120" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="95,185,0,0" Name="textBlock2" Text="70-79" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="95,227,0,0" Name="textBlock3" Text="80-89" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="95,269,0,0" Name="textBlock4" Text="90-100" VerticalAlignment="Top" Width="120" /> <TextBox HorizontalAlignment="Left" Margin="185,182,0,0" Name="txt7" Width="120" Height="23" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="185,222,0,0" Name="txt8" VerticalAlignment="Top" Width="120" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="186,266,0,0" Name="txt9" VerticalAlignment="Top" Width="120" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="113,34,0,0" Name="textBlock5" Text="平均分" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="80,85,0,0" Name="textBlock6" Text="除去85以下的平均分" VerticalAlignment="Top" Width="132" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="196,30,0,0" Name="txtAve" VerticalAlignment="Top" Width="120" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="197,87,0,0" Name="txtAve85" VerticalAlignment="Top" Width="120" /> </Grid> </Window>
为StudentScoreShow.xaml.cs添加代码如下:来区分是显示全部还是显示部分,因为他们在加载数据时候有区别
//判断是选择全部数据还是相同的人选择最高成绩. public bool IsAll { get; set; } public bool IsSelect { get; set; }
StudentScoreShow.xaml在加载时候的事件代码如下:
private void Window_Loaded(object sender, RoutedEventArgs e) { if (IsAll) { StudentDAL dal = new StudentDAL(); //dgStudent.ItemsSource = dal.ListStudentMaxScore(); dgStudent.ItemsSource = dal.ListAll(); } else if (IsSelect) { StudentDAL dal = new StudentDAL(); dgStudent.ItemsSource = dal.ListStudentMaxScore(); } else { return; } }
为导出数据成为TXT文本格式的按钮添加Click事件,代码如下:因为涉及字符串的拼接,所以先写一个方法如下:
public string strcat(string s1, string s2) { string s; return s = s1 + s2; } private void btnOutput_Click(object sender, RoutedEventArgs e) { string str; StudentDAL dal = new StudentDAL(); Student[] students = dal.ListStudentMaxScore(); StreamWriter sw = new StreamWriter(@"C:/Documents and Settings/Administrator/桌面/3.txt", false, Encoding.Default); for(int i=0;i<students.Length;i++) { Student student = new Student(); student =students[i]; string stName=student.StudentName; string tab="\t"; string stScort=student.StudentScore; str = strcat(strcat(stName, tab), stScort); sw.WriteLine(str); } sw.Close(); MessageBox.Show("成功导出!"); }
统计时候StatisticsNumber.xaml加载页面的代码如下:
private void Window_Loaded(object sender, RoutedEventArgs e) { string n0=new StudentDAL().Count0().ToString(); string n7=new StudentDAL().Count7().ToString(); string n8 = new StudentDAL().Count8().ToString(); string n9 = new StudentDAL().Count9().ToString(); string n1 = new StudentDAL().AveScort().ToString(); string n2 = new StudentDAL().AveScore1().ToString(); txt0.Text = n0; txt7.Text = n7; txt8.Text = n8; txt9.Text = n9; txtAve.Text = n1; txtAve85.Text = n2; }
以上完成
--------------------------------------------------------------------------------------------------------------------------------------------------
第二部分:
2. 对话框的编制
编一个对话框,如下图所示。要求从文件中读取8个数据和网格化算法设置(文件格式自已定义),并显示在对话框中,在对话框中编辑,8个参数不是完全独立的,它们的关系是:X方向间隔=(最大X-最小X)/(列数M-1),Y方向间隔=(最大Y-最小Y)/(行数N-1),也就是说,当修改了列数M,则X方向的间隔会自动根据上面公式改变;当修改了X方向的间隔,则列数M也会自动改变,触发事件是按下TAB键。网格化算法与前面是独立的,它包含有克里金法、最小曲面法、滑动平均法和其它方法。若按回车键,则表示按了确定键;若按了ESC键,则表示按了取消并退出键,不保存数据,若点右上角的叉叉,则表示取消,并不保存数据。若点击“使用数据范围”,则将弹出一个对话框,如图2所示,请入四个数字后,将数字返回给此对话框的前四个数值:最小X、最大X、最小Y、最大Y,同时,最下面2个数:X方向间隔和Y方向间隔,也会根据上面6个值做重新计算后,填入最底部2个框内。按确定,则保存对话框中的数据至文件中,并退出;若按取消,则不保存并退出。
第一步。新建网格化参数的窗体和输入四个数的窗体,分别为:网格化窗体.xaml和importWindow.xaml。
然后将App.xaml中的StartupUri=属性修改为:"网格化窗体"。设计代码如下:
<Window x:Class="SAMSys.网格化窗体" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="网格化窗体" Height="600" Width="400" Loaded="Window_Loaded" KeyDown="Window_KeyDown"> <Grid Name="gridXY" > <TextBox Height="23" HorizontalAlignment="Left" Margin="86,90,0,0" Name="txtMinX" VerticalAlignment="Top" Width="120" /> <TextBlock HorizontalAlignment="Left" Margin="36,96,0,448" Name="tb" Text="最小X" Width="54" /> <TextBlock HorizontalAlignment="Left" Margin="38,130,0,414" Name="textBlock2" Text="最大X" /> <TextBlock HorizontalAlignment="Left" Margin="39,229,0,0" Name="textBlock3" Text="列数M" Height="23" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="39,268,0,0" Name="textBlock4" Text="行数N" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="39,331,0,0" Name="textBlock5" Text="Y方向间隔" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="38,297,0,0" Name="textBlock6" Text="X方向间隔" VerticalAlignment="Top" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="39,196,0,0" Name="textBlock7" Text="最大Y" VerticalAlignment="Top" /> <TextBlock HorizontalAlignment="Left" Margin="36,157,0,381" Name="textBlock8" Text="最小Y" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="38,359,0,0" Name="textBlock1" Text="网格化算法" VerticalAlignment="Top" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="88,124,0,0" Name="txtMaxX" VerticalAlignment="Top" Width="120" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="91,157,0,0" Name="txtMinY" VerticalAlignment="Top" Width="120" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="90,189,0,0" Name="txtMaxY" VerticalAlignment="Top" Width="120" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="92,223,0,0" Name="txtCoulNum" VerticalAlignment="Top" Width="120" TextChanged="txtCoulNum_TextChanged" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="98,260,0,0" Name="txtRowNum" VerticalAlignment="Top" Width="120" TextChanged="txtRowNum_TextChanged" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,292,0,0" Name="txtXdirectionSpacing" VerticalAlignment="Top" Width="120" TextChanged="txtXdirectionSpacing_TextChanged" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="103,328,0,0" Name="txtYdirectionSpacing" VerticalAlignment="Top" Width="120" SelectionChanged="txtYdirectionSpacing_SelectionChanged" /> <ListBox Height="23" HorizontalAlignment="Left" Margin="103,359,0,0" Name="lbGriddingAlgorithm" VerticalAlignment="Top" Width="120" > <ListBoxItem Content="克里金法" IsSelected="True"></ListBoxItem> <ListBoxItem Content="最小曲面法"></ListBoxItem> <ListBoxItem Content="滑动平均法"></ListBoxItem> <ListBoxItem Content="其它方法"></ListBoxItem> </ListBox> <Button Content="使用数据范围" Height="23" HorizontalAlignment="Left" Margin="19,440,0,0" Name="btnRange" VerticalAlignment="Top" Width="92" Click="btnRange_Click" /> <Button Content="确认" Height="23" HorizontalAlignment="Left" Margin="133,440,0,0" Name="btnOk" VerticalAlignment="Top" Width="75" Click="btnOk_Click" /> <Button Content="取消" Height="23" HorizontalAlignment="Left" Margin="235,440,0,0" Name="btnCancel" VerticalAlignment="Top" Width="75" Click="btnCancel_Click" /> </Grid> </Window>
因为涉及到按下键盘中的ESC和ENter和Tab键的相关操作,所以为Window添加KeyDown事件,和相应文本框数值改变时候的Change事件。代码如下:
bool IsColTab=false;
bool IsXSpaceTab = false;
bool IsRowTab = false;
bool IsYSpaceTab = false;
private void txtCoulNum_TextChanged(object sender, TextChangedEventArgs e) { IsColTab = true; } private void txtXdirectionSpacing_TextChanged(object sender, TextChangedEventArgs e) { IsXSpaceTab = true; } private void txtRowNum_TextChanged(object sender, TextChangedEventArgs e) { IsRowTab = true; } private void txtYdirectionSpacing_SelectionChanged(object sender, RoutedEventArgs e) { IsYSpaceTab = true; }
private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Tab&&IsRowTab ==true) { double a = Convert.ToInt32(txtMaxY.Text) - Convert.ToInt32(txtMinY.Text); double b = Convert.ToInt32(txtRowNum.Text) - 1; txtYdirectionSpacing.Text = (a / b).ToString(); } else if (e.Key == Key.Tab&&IsYSpaceTab ==true) { double a = Convert.ToInt32(txtMaxY.Text) - Convert.ToInt32(txtMinY.Text); double x = Convert.ToInt32(txtYdirectionSpacing.Text); double n = (a / x) + 1; txtRowNum.Text = n.ToString(); } else if (IsColTab == true) { double a = Convert.ToInt32(txtMaxX.Text) - Convert.ToInt32(txtMinX.Text); double b = Convert.ToInt32(txtCoulNum.Text) - 1; txtXdirectionSpacing.Text = (a /b).ToString(); } else if (IsXSpaceTab== true) { double a = Convert.ToInt32(txtMaxX.Text) - Convert.ToInt32(txtMinX.Text); double x = Convert.ToInt32(txtXdirectionSpacing.Text); double n = (a / x) + 1; txtCoulNum.Text = n.ToString(); } else if (e.Key == Key.Enter) { Save_Quit(); } else if (e.Key == Key.Escape) { this.Close(); } else { return; } }
取消按钮的Click事件如下:
private void btnCancel_Click(object sender, RoutedEventArgs e) { this.Close(); }
确定键的Click事件,代码如下:
/// <summary> /// 确定键控制 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOk_Click(object sender, RoutedEventArgs e) { //string[] str = { txtMinX.Text, txtMaxX.Text, txtMaxY.Text, txtMinY.Text }; //StreamWriter sw = new StreamWriter(@"C:/Documents and Settings/Administrator/桌面/2.txt",false,Encoding.Default); //string str1; //for(int i=0;i<str.Length;i++) //{ // str1 = str[i]; // sw.WriteLine(str1); //} //sw.Close(); //this.Close(); Save_Quit(); }
将保存并退出写成一个方法Save_Quit()代码如下:
/// <summary> /// 保存并退出 /// </summary> public void Save_Quit() { string[] str = { txtMinX.Text, txtMaxX.Text, txtMaxY.Text, txtMinY.Text }; StreamWriter sw = new StreamWriter(@"C:/Documents and Settings/Administrator/桌面/2.txt", false, Encoding.Default); string str1; for (int i = 0; i < str.Length; i++) { str1 = str[i]; sw.WriteLine(str1); } sw.Close(); this.Close(); }
网格化窗体加载时候的代码如下:
private void Window_Loaded(object sender, RoutedEventArgs e) { string[] lines = File.ReadAllLines("C:/Documents and Settings/Administrator/桌面/12.txt"); //读取所有这样的代码 foreach (var line in lines) { string[] str = line.Split('\t'); txtMinX.Text = str[0]; txtMaxX.Text = str[1]; txtMinY.Text = str[2]; txtMaxY.Text = str[3]; txtCoulNum.Text = str[4]; txtRowNum.Text = str[5]; double a = Convert.ToInt32(txtMaxX.Text) - Convert.ToInt32(txtMinX.Text); double b = Convert.ToInt32(txtCoulNum.Text) - 1; txtXdirectionSpacing.Text = (a / b).ToString(); double c = Convert.ToInt32(txtMaxY.Text) - Convert.ToInt32(txtMinY.Text); double d = Convert.ToInt32(txtRowNum.Text) - 1; txtYdirectionSpacing.Text = (c / d).ToString(); } }
使用范围数据的设置按钮的Click事件,代码如下:
/// <summary> /// 使用数据范围按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRange_Click(object sender, RoutedEventArgs e) { ImportWindow impWin = new ImportWindow(this); impWin.ShowDialog(); }
在ImportWindow.xaml.cs中,因为需要网格化窗体和ImportWindow中相应控件产生关联,所以需要在ImportWindow.xaml.cs中添加一部分这样的代码。同时在声明时候传递参数再打开。代码如下:
/// <summary> /// 窗体间相互关联 /// </summary> 网格化窗体 showWin = new 网格化窗体(); public ImportWindow(网格化窗体 showWin) { InitializeComponent(); this.showWin = showWin; }
确定和取消按钮的事件,代码如下:
private void btnOk_Click(object sender, RoutedEventArgs e) { showWin.txtMaxX.Text= txtMaxX.Text; showWin.txtMinX.Text = txtMinX.Text; showWin.txtMaxY.Text = txtMaxY.Text; showWin.txtMinY.Text = txtMinY.Text; this.Close(); } private void btnCancel_Click(object sender, RoutedEventArgs e) { this.Close(); }
----------------------------------------------------------------------------------------------------------------------------------
以上完成。
浙公网安备 33010602011771号