问题解答集

目录

问题解答集    1

目录    2

修订历史记录    3

1有关Update程序    4

在程序中加入可复制到输出文件夹的XML文件    4

2 有关练习    7

2.1 richTextBox中输入用于介绍的文字    7

2.2 Timer控件的使用    8

2.3 c#中的跨线程调用    10

2.4 c#调用系统命令    12

2.5 c# 调用一个button的click事件处理函数    13

2.6判断输入的网址前是否加http://    14

2.7更该流的编码格式    14

2.8设置comboBox的初始值    15

2.9 如何在VS2005中添加工具箱项(VS2003中的自定义工具箱选项)    15

2.10 vs2005中为什么没有vs2003中的toolbar,tab控件了?? 已用ToolStrip和TabControl替代!    17

2.11下载文件是如何打开保存文件对话框    17

 

1有关Update程序

  1. 在程序中加入可复制到输出文件夹的XML文件

    可以在VS中直接加入需要在程序中使用的Xml文件,方法如下:

    图 1-1

    首先在资源管理器中右击项目,单击添加(图 1-1,1-2),

    图 1-2

    在添加新项中选择添加Xml文件,并输入文件名。(图 1-3)

    图 1-3

    此时就可以在VS中编辑Xml文件了。(图 1-4)

    图 1-4

    如果程序需要在拷贝到其他机器上正确运行,则需要将.exe文件与Xml文件放入同一个文件夹中,所以需要将.xml文件进行复制。

    图 1-5

    如图 1-5所示,在资源管理器中单击。Xml文件后,在其属性选项中的复制到输出目录选项设置为如果较新则复制或始终复制。此时,如果解决方案配置选项选择的是Debug型,则Xml文件将输出到Debug文件夹,如果选择的是release型,则输出到release文件夹。(图 1-6)

    图 1-6

    2 有关练习

    2.1 在richTextBox中输入用于介绍的文字

    在richTextBox中显示说明型文字的好处是,可以在设计视图中直接输入文字如不用在程序中输入。而且自动换行。用法如图(2-1 2-2)。

    图 2-1

    图 2-2

    2.2 Timer控件的使用

    Timer 空间用于计时,以一定的时间间隔重复执行某一部分程序。首先要拖入timer控件,在属性设置中Interval比较重要,其功能是设置时间的间隔,以毫秒为单位。(图 2-3)

    图 2-3

    设置事件非常重要,不设置相关事件计时器就不对任何程序段作定时刷新的处理。选择相应的程序段。(图 2-4)

    图 2-4

    2.3 c#中的跨线程调用

    在不是创建空间的子函数中调用控件会造成线程冲突,下面的方法用于解决此问题。

    delegate void SetTextCallback();//此处用于线程处理

    //此句放在Form中开头处。

     

     

     

    private void button1_Click(object sender, EventArgs e)

    {

    System.Timers.Timer t = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为毫秒;

     

    t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;

    t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;

    t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

     

    //如何控制其停止?

     

    this.listBoxGo.Items.Add("hey!");

    this.listBoxGo.Items.Add("haha!");

    }

     

     

    private void theout(object source, System.Timers.ElapsedEventArgs e)

    {

     

    SetText();

     

    }

     

     

     

     

    //方法...Ok 进行线程比较,如果冲突则重复,否则更改progressBar.Value的值

    private void SetText() //可在此方法处设置progressBar.Value的值,不会出现线程冲突

    {

    // InvokeRequired required compares the thread ID of the

    // calling thread to the thread ID of the creating thread.

    // If these threads are different, it returns true.

     

    const int step = 3;

     

    if (this.progressBar1.InvokeRequired&&progressBar1.Value<progressBar1.Maximum)

    {

    SetTextCallback d = new SetTextCallback(SetText);

    this.Invoke(d, new object[] { });

    }

    else

    {

    if (this.progressBar1.Value + step <= this.progressBar1.Maximum)//赋值时考虑是否会超过progressBar.Maximum

    this.progressBar1.Value += step;

    else

    {

    progressBar1.Value = 100;

     

    }

    }

    }

     

    上面的程序意义,生命timer控件,每一秒中调用一次theout函数,theout函数的功能只是调用SetText函数(因为此处要求的函数参数不同,所以这样设置),之后在SetText函数中进行线程处理。

    2.4 c#调用系统命令

    using System;

    using System.IO;

    using System.Diagnostics;

     

    class LaunchDirCommand {

    static void Main() {

    ProcessStartInfo psi = new ProcessStartInfo();

    psi.FileName = "cmd.exe";

    psi.Arguments = "/c dir c:";

    psi.RedirectStandardOutput = true;

    psi.UseShellExecute = false;

    Process p = Process.Start(psi);

    StreamReader stmrdr = p.StandardOutput;

    string s = stmrdr.ReadToEnd();

    Console.WriteLine(s);

    }

    }

    这段程序是控制台程序,相应的可应用于WinForm程序。改程序通过cmd命令调用系统的命令。在设置参数时,形式为"/c 命令";一定要注意中间的空格。如调用ping命令,可设置参数为"/c ping 172.27.8.59";调用ping –t 时,参数为"/c ping 172.27.8.59 -t";如果所用地址为用户输入,例如存放在textBox中,可设string str = "/c ping" + textBox.Text + " -t";

    一定要注意空格,否则极容易出错。

    2.5 c# 调用一个button的click事件处理函数

    例如,在一个textBox中输入网址,然后回车要产生与点击连接go按钮相同的功能。可以找到textBox空间的KeyPress事件,双击添加

    事件处理程序。

    private void textBoxUrl_KeyPress(object sender, KeyPressEventArgs e)

    {

    object a = new object();

    EventArgs b = new EventArgs();

    //判断是否按下了Enter键

    if(e.KeyChar ==(char)13)

    buttonSend_Click(a, b);

    }

    此处如果检测到按下了Enter键,则调用buttonSend_Click()函数。因为buttonSend_Click()函数需要两个参数,一个为object型,另一个为EventArgs型。而此时有没有具体的参数要传给函数,所以之前要new两个相应类型的参数。

    2.6判断输入的网址前是否加http://

    如果用HttpWebRequest类进行网页下载,建立连接时要求输入的地址必须是严格的http://形式。所以,接受用户输入后用string变量存储,然后使用ToLower()方法将其变成小写,之后判断是否以http://开头,如果不是,加上这个开头。具体代码:

    string url = this.textBoxUrl.Text;

    url.ToLower();

    if (url.IndexOf(@"http://") == -1)

    {

    url = @"http://" + url;

    this.textBoxUrl.Text = url;

    }

    2.7更该流的编码格式

         编码格式不正确会造成输出乱码。下面的代码将从HttpWebRequest类读出来的Stream更改格式,使其可以在richTextBox中正确的显示中文而不出现乱码。

    //HTTP请求变量

    HttpWebRequest req;

    //HTTP应答变量

    HttpWebResponse res;

    //基础数据流

    Stream s;

    //读数据流

    StreamReader r;

     

    req = (HttpWebRequest)WebRequest.Create(textBoxProxy.Text);//发送请求HttpWebRequest

    res = (HttpWebResponse)req.GetResponse();//接受HttpWebResponse类型的来自HttpWebRequest类型的//回应

    s = res.GetResponseStream();//基础数据流的设置

    r = new StreamReader(s,System.Text.Encoding.Default);//StreamReader 读取流

    richTextBoxProxy.Text = r.ReadToEnd();

    2.8设置comboBox的初始值

    comboBox的一系列值对应从0开始的一系列整数。其初始化。

    this.cmbPriority.SelectedIndex = 0;

    2.9 如何在VS2005中添加工具箱项(VS2003中的自定义工具箱选项)

    在工具箱处右击,选择选择项(图)

    然后即刻在弹出的对话框中进行相应得选择,其功能相当于VS2003中的自定义工具箱.

    2.10 vs2005中为什么没有vs2003中的toolbar,tab控件了??

    已用ToolStrip和TabControl替代!

    2.11下载文件是如何打开保存文件对话框

    SaveFileDialog类用于打开保存文件对话框.

    SaveFileDialog sDialog = new SaveFileDialog();

    sDialog.Filter = "网页(*.htm;*.html)|*.htm;*.html";

    //显示保存文件对话框

    if (sDialog.ShowDialog() == DialogResult.OK)

    {

    //得到保存文件名

    this.txt2_Add.Text = sDialog.FileName;

    }

    .Filter设置保存文件的类型,此处将要保存的文件的路径和名称存到TextBox中,在写入文件内容时可从TextBox中读取.写入时用到流.

     

     

     

     

     

     

原文地址:https://www.cnblogs.com/lexus/p/977345.html