C#一些用法

 C#一些用法

 

关于 WPF 在主窗口中用多线程打开的子窗口关闭后进程还存在,这个问的题的解决方法。

 this.Dispatcher.Thread.Abort()

程序退出的方法:

  • this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
  • Application.Exit();  强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
  • Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
  • System.Environment.Exit(0);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。

 

C#的引用

class RefExample {
    static void Method(ref int i) {
        // Rest the mouse pointer over i to verify that it is an int.
        // The following statement would cause a compiler error if i
        // were boxed as an object.
        i = i + 44;
    }

    static void Main() {
        int val = 1;
        Method(ref val);
        Console.WriteLine(val);

        // Output: 45
    }
}

 

 

窗口类:

关闭窗口:this.Close();
隐藏窗口:this.Hide();
弹出新的窗口后,能对原窗口操作:Show();
弹出新的窗口后,不能对原窗口操作:ShowDialog();

弹出信息的小窗口:
MessageBox.Show("信息");

c# form点击X退出程序
属性中,双击FormClosing添加事件,在函数中写:
Application.Exit();
textBox的一些用法:
' textBox2.Text = "sda"; // 把字符串显示在文本中 在C#中把textBox置为密码框,可以直接在属性的行为的passwordChar置为* String spass = textBox2.Text; // 得到文本中字符串 Application.Exit(); // 关闭所有界面 C# ListView用法详解 http://blog.csdn.net/czw2010/article/details/7910324 以下为简单的应用: ListView_commuData.View = View.Details;//显示表头 ListView.gridlines = true;//显示网格线 listView1.View = View.Details; // 显示表头 listView1.GridLines = true; // 显示网格线 int per = 100; // 列宽 listView1.Columns.Add("课程编号", per, HorizontalAlignment.Center); listView1.Columns.Add("课程名称", per, HorizontalAlignment.Center); listView1.Columns.Add("任课教师", per, HorizontalAlignment.Center); listView1.Columns.Add("学分", per, HorizontalAlignment.Center); SqlConnection con = new SqlConnection("server= (local);uid=sa;pwd=密码;database=数据库名"); con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText = "SQL语句"; SqlDataReader rs = cmd.ExecuteReader(); // 查询的SQL语句 while (rs.Read()) { String[] s = new String[4]; for(int i=0;i<4;i++) s[i] = String.Format("{0}", rs[i]); // 取出第几列元素 ListViewItem lvi = new ListViewItem(); lvi.Text = s[0]; for(int i=1;i<4;i++) lvi.SubItems.Add(s[1]); listView1.Items.Add(lvi); } con.Close(); cmd.ExecuteNonQuery(); // 插入,更新,删除操作,返回的是影响的行数 数据库进行连接: 命名空间: using System.Data.SqlClient; // 等待数据库连接 SqlConnection con = new SqlConnection("server= (local);uid=sa;pwd=密码;database=数据库"); con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from teacher "; SqlDataReader rs = cmd.ExecuteReader(); while(rs.Read()){ String x = String.Format("{0}", rs[0]); // 取出数据库中的第几个下标的信息 String y = String.Format("{0}",rs[2]); } con.Close(); rs.Close(); cmd.ExecuteNonQuery(); // 插入,更新,删除操作,返回的是影响的行数

 

单选框 radioButton.Checked表示是否被选中

复选框  checkbox1.Checked 表示是否选中

下拉框:

comboBox1.Items.Clear();
comboBox1.Items.Add("生活杂记");
comboBox1.Items.Add("心情随笔");
comboBox1.Items.Add("工作笔记");
comboBox1.SelectedIndex = 0; // 选择第几个
DropDownStyle 属性设置为 DropDownList.
Simple 简单的下拉列表框(始终显示列表)、
DropDown 可以编辑,与有下拉列表。默认.
DropDownList 只有下拉列表,不能编辑。

 

把textBox之类的空间设置为只读,不可以修改删除的操作:把readonly属性设为true,并且把BackColor这是为White

 

文件浏览对话框
if (this.openFileDialog2.ShowDialog() == DialogResult.OK) {
  string FileName = this.openFileDialog2.FileName; // 你的 处理文件路径代码
 }
文件夹浏览对话框
FolderBrowserDialog 
FolderBrowserDialog dilog = new FolderBrowserDialog();
dilog.Description = "请选择文件夹";
if(dilog.ShowDialog() == DialogResult.OK || dilog.ShowDialog() == DialogResult.Yes){
    path=dilog.SelectedPath;
}

 

c# webBrowser

window.external 不支持该对象:

查看C# form函数是否为public 

axWindowsMediaPlayer控件:

axWindowsMediaPlayer1.close(); // 启动时不直接运行该控件

axWindowsMediaPlayer2.Ctlcontrols.play();  // 开始播放

取消上一首歌,播放下一首歌
axWindowsMediaPlayer1.close();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.currentPlaylist.appendItem(axWindowsMediaPlayer1.newMedia(FileName));

 

将背景设置为透明:
this.BackgroundImage = null;
this.BackColor = System.Drawing.Color.Red;//将窗体背景设置成红色
this.TransparencyKey = System.Drawing.Color.Red; //将红色设置成透明色

换背景图:
this.BackgroundImage = Image.FromFile(System.IO.Path.GetFullPath("bg1.jpg"));

 

 

进度条:

你在窗体上拉个进度条进来,然后在窗体上放个按钮,在按钮点击事件里写如下 :

progressBar1.Maximum = 100;//设置最大长度值
progressBar1.Value = 0;//设置当前值
progressBar1.Step = 5;//设置没次增长多少
for (int i = 0; i < 10; i++){//循环
    System.Threading.Thread.Sleep(1000);//暂停1秒
    progressBar1.Value += progressBar1.Step;让进度条增加一次
}

 

如何固定的设置窗体大小

  有一个关于窗体边界的属性(FromBorderStyle)。这个属性的默认值是Sizable。还有另外六个值,分别为None、FixedSingle、Fixed3D、FixedDialog、FixedToolWindow、SizableToolWindow。None就是无边界,然后窗体右上角也没有最小化、最大化、关闭的按键,一般用于显示ICON或者一般的联系方式。Fixed的意识差不多就是固定的意思。然后Single就是窗体框架只是一条线

 

C# KeyValuePair<TKey,TValue>的用法。结构体,定义可设置或检索的键/值对。也就是说我们可以通过 它记录一个键/值对这样的值。比如我们想定义一个ID(int类型)和Name(string类型)这样的键/值对,那么可以这 样使用。

/// <summary>
/// 设置键/值对
/// </summary>
/// <returns></returns>
private KeyValuePair<int, string> SetKeyValuePair()
{
    int intKey = 1;
    string strValue = "My value";
    KeyValuePair<int, string> kvp = new KeyValuePair<int, string>(intKey, strValue);
    return kvp;
}
 

/// <summary>
/// 获得键/值对
/// </summary>
private void GetKeyValuePairDemo()
{
    KeyValuePair<int, string> kvp = SetKeyValuePair();
    int intKey = kvp.Key;
    string strValue = kvp.Value;
}

 KeyValuePair<int, int> now = new KeyValuePair<int, int>(a,b);

 

 类似于C++ STL

 

操作
C++(STL)
C#(.net)
说明
包含
#include <vector>
using System.Collections.Generic;
C++中也可以using namespace std;

声明
std::vector<int> array;
List<int> array = new List<int>();


迭代器声明
std::vector<int>::iterator iter=array.begin();
List<int>.Enumerator iter = array.GetEnumerator();


C++
array.push_back(4); 
array.insert(iter,51);
C#
array.Add(4); 
array.Insert(2, 51);



C++
int val=array[0]; 
val=array.at(1);  //进行下标检测

C#
int val = array[0];
array.Contains(5); //是否包含5 
array.IndexOf(1);  //元素1的下标
 
C++
array.pop_back();  //删除最后的元素 
array.erase(iter);  //删除iter位置的元素 
array.clear();
C#
array.Remove(1);  //删除"1”这个元素 
array.RemoveAt(0);  //删除0号元素 
array.Clear();

C++
array.empty(); 
array.capacity();  //容量(根据当前非配的内存) 
array.size();  //元素数
C#
array.Count;  //元素数 
array.Capacity;  //容量
 
遍历
C++
for (std::vector<int>::size_type i=0;i<array.size();++i){} 
for (iter=array.begin();iter!=array.end();iter++){} 
for_each(array.begin(),array.end(),func); //func()是函数
C#
for (int i = 0; i < array.Count; i++){} 
while (iter.MoveNext()){} 
foreach (int d in array){}
排序
std::sort(array.begin(),array.end());
array.Sort();
C++中要#include <algorithm>,上面的for_each也是




如果是自定义的Key类型,C++中需要重载比较运算符;C#中可自定义相等比较器
C++:    map
#include <map>
map<string,int> map; // 当然不能够用map,这里只是说明方便而用的
map_type::iterator iter = ma.begin();
map[_T("first")]=5; 
map.insert(map_type::value_type(_T("second"),2)); 
map.insert(map_type::value_type(_T("second"),3));    //不覆盖,不异常
map.erase(iter);  //iter有效且不等于map.end() 
map.erase(_T("first")); 
map.clear();
int val=map[_T("second")];  //没有则构造新的 
iter=map.find(_T("first")); 
if (iter!=map.end()) 
    val=iter->second;
for (iter=map.begin();iter!=map.end();++iter) //遍历时删除 
    map.erase(iter++);
map.size(); 
map.empty();  //是否为空



C#:        Dictionary
命名空间:using System.Collections.Generic;
定义:Dictionary<string, int> map = new Dictionary<string, int>();
插入:map.Add("first", 5); 
      map["second"] = 2;  //这种操作已经进行了插入 
      //map.Add("second", 3);    //重复异常
删除:map.Remove("first"); 
清空:map.Clear();
调用:int data = map["second"];    //不存在则异常 
map.ContainsKey("third"); 
map.ContainsValue(5); 
map.TryGetValue("hello", out data);
注意C++中下标检索时如果不存在这个元素也不产生错误
foreach (KeyValuePair<string, int> pair in map)
    //不能进行删除操作



C#:        Hashtable
命名空间:using System.Collections;
定义:Hashtable ma = new Hashtable();
插入:ma["dsa"] = 12; // 可以覆盖之前的
      ma.Add("dsadsa",123);
删除:ma["dsa"] = null;
清空:ma.Clear();
遍历:foreach (DictionaryEntry i in ma)
大小:ma.count
不存在则为null

 

 

 

 

转自:c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件

c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件,在IO处理上遇到了无法操作的问题。

文件“D:\log.txt”正由另一进程使用,因此该进程无法访问该文件。

log.txt是一个日志文件,不定时都可能由另外的程序对它进行日志记录写入操作。

今需要对日志文件读取出来,显示在日志查询里,需要用到了IO流。

1、 FileStream fs = File.OpenRead(url);
StreamReader sr = new StreamReader((System.IO.Stream)fs, System.Text.Encoding.Default);

错误提示:文件“D:\Log\Cargoabc\logfilecargoabc.txt”正由另一进程使用,因此该进程无法访问该文件。

2、StreamReader sr = File.OpenText(url);

错误提示:错误提示:文件“D:\Log\Cargoabc\logfilecargoabc.txt”正由另一进程使用,因此该进程无法访问该文件。

3、 FileStream fs = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);

正确读取。

总结:

这样的情况,不单要与只读方式打开txt文件,而且,需要共享锁。还必须要选择flieShare方式为ReadWrite。因为随时有其他程序对其进行写操作。

 1 遍历文件夹folderName
 2 DirectoryInfo dir = new DirectoryInfo(folderName);
 3 FileInfo[] files = dir.GetFiles("*.txt");
 4 foreach (FileInfo f in files){
 5     string fileName = f.Name.ToString();
 6 }
 7 
 8 文件读取
 9 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
10 StreamReader fin = new StreamReader(fs);
11 string re = fin.ReadToEnd();
12 fin.Close();
13 
14 文件写入
15 StreamWriter fout = new StreamWriter(fileName);
16 fout.Write(data);
17 fout.Close();

 

posted @ 2013-05-16 10:27  yejinru  阅读(563)  评论(0编辑  收藏  举报