用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();
        }

----------------------------------------------------------------------------------------------------------------------------------

以上完成。

 

 

 

 

posted @ 2013-06-29 09:32  秋水惜朝  阅读(1491)  评论(0)    收藏  举报