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

 

你可能感兴趣的:(C#)