visual studio快捷键
| 快捷键 | 说明 |
|---|---|
Tab |
向右缩进 |
Shift+Tab |
向左缩进 |
Ctrl + K + D |
选中代码对齐 |
Ctrl + L |
删除行 |
Ctrl + D |
复制行 |
Alt + 上下箭头 |
上下移动 |
Ctrl + K + C |
注释 |
Ctrl + K + U |
取消注释 |
一. 打包安装程序
1. 点击解决方案,右键添加 -> 新建项目

2. 选择Setup Project

3. 生成工包台项目

4. 右键Application Folder,添加项目输出,选择Workable项目


5. 确定后生成界面

6. 添加快捷方式

7. 新建2个快捷方式,分别拖到左边的文件夹

8. 设置项目的属性

9. 生成安装包


10. 打包发布版本
将Debug切换到Release,重新生成即可。

二. 语法
1. vs code 运行报错
[Running] scriptcs "/Users/zz/Projects/c#/demo1/demo1.cs"
/bin/sh: scriptcs: command not found
解决:使用安装脚本
brew install scriptcs
2. VS折叠代码
#region 这里写注释
#endregion
3. C# 5新的格式化输出格式 $
string str = "abc"
老版本
Console.WriteLine("Hello World {0}" + "abd ", str);
新版本
Console.WriteLine($"Hello World {str}");
4. mysql中表NameTable的自增id插入数据:id传null或者不传id字段、其他字段写完整。
string sql = string.Format("insert into NameTable values(null,'{0}','{1}'')", list[0], list[1]);
5. 委托delegate
namespace Demo1
{
/// <summary>
/// 委托
/// </summary>
class DelegateDemo
{
delegate int MyDelegate(int a, int b, int c = 0);
int add(int a, int b, int c)
{
return a + b + c;
}
int add1(int a, int b, int c)
{
return a + b + c;
}
int add2(int a, int b, int c=10)
{
return a + b + c;
}
public void test()
{
MyDelegate md = new MyDelegate(add);
MyDelegate md1 = new MyDelegate(add1);
Console.WriteLine("rst = " + md(1, 2, 4));
md += add1;
Console.WriteLine("rst1 = " + md(1, 2, 4));
md = add2;
Console.WriteLine("rst2 = " + md(1, 2));
MyDelegate myN;
myN = md + md1;
Console.WriteLine("rst2 = " + myN(11, 32, 8));
}
}
}
在main中
DelegateDemo dd = new DelegateDemo();
dd.test();
6. 事件Event
namespace Demo1
{
/***********发布器类***********/
class EventDemo
{
public delegate void DlPrintValueHandler(int value);
//事件
public event DlPrintValueHandler dlMethod;
//构造方法
public EventDemo()
{
changeValue(4);
}
//触发代理事件
public void changeValue(int value)
{
if (dlMethod != null)
{
dlMethod(value);
}
else
{
Console.WriteLine("event not fire");
}
}
}
/***********订阅器类***********/
public class subscribEvent
{
public void log(int value)
{
Console.WriteLine($"subscribEvent.log({value})");
}
}
}
在main中
static void eventDemo()
{
EventDemo e = new EventDemo(); /* 实例化对象,第一次没有触发事件 */
subscribEvent v = new subscribEvent(); /* 实例化对象 */
e.dlMethod += new EventDemo.DlPrintValueHandler(v.log); /* 注册 */
e.changeValue(7);
e.changeValue(11);
}
7. 输入日志
namespace Demo1
{
class LoggerDemo
{
FileStream fs;
StreamWriter sw;
public LoggerDemo(string filename)
{
fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs);
}
public void Logger(string info)
{
sw.WriteLine(info);
}
public void Close()
{
sw.Close();
fs.Close();
}
/// <summary>
/// 写文件多种方法
/// </summary>
private void fileOutput()
{
//1
FileStream fs = new FileStream("test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);
fs.WriteByte(0x63);
fs.Close();
//2
StreamWriter sw = new StreamWriter("test1.dat");
sw.Write("aaa1");//不换行
sw.WriteLine("b1");//换行
sw.Close();
//3
File.WriteAllText("test2.txt", "halo nihoa");
}
/// <summary>
/// 追加到固定文件
/// 自动释放
/// </summary>
/// <param name="content"></param>
private void log(string content)
{
using (FileStream fs = new FileStream("log1.log", FileMode.Append, FileAccess.Write))
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(content);
sw.Close();
}
}
}
}
在main中
static void logger()
{
LoggerDemo ld = new LoggerDemo("log.c");
ld.Logger("halo");
ld.Logger(", world");
ld.Close();
}
8. 泛型Generic
namespace Demo1
{
/// <summary>
/// 泛型
/// </summary>
class GenericDemo<T>
{
private T[] array;
private ArrayList list;
//泛型委托
delegate T GenericMethod<T>(T value);
public GenericDemo(int size = 0)
{
list = new ArrayList();
//array = new T[size + 1];
}
public T getItem(int index)
{
return (T)list[index];
//return array[index];
}
public void setItem(int index, T value)
{
list.Add(value);
//array[index] = value;
}
public int getSize()
{
return list.Count;
//return array.Count();
}
//代理
public int gLog(int value)
{
Console.WriteLine("泛型log int " + value);
return value;
}
public string gLogString(string value)
{
Console.WriteLine("泛型log string: " + value);
return value;
}
public void dddl()
{
GenericMethod<int> gm = new GenericMethod<int>(gLog);
gm(45);
GenericMethod<string> gmString = new GenericMethod<string>(gLogString);
gmString("string 46");
}
}
}
在main中
static void genericDemo()
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("====================");
Console.WriteLine("genericDemo");
Console.ResetColor();
GenericDemo<String> gd = new GenericDemo<string>(1);
gd.setItem(0, "aa");
gd.setItem(1, "bb");
gd.setItem(2, "cc4");
gd.setItem(2, "cc5");
gd.setItem(6, "cc6");
gd.setItem(2, "cc7");
for (int i = 0; i < gd.getSize(); I++)
{
Console.WriteLine(gd.getItem(i));
}
}
9. 匿名函数 Anonymous methods
namespace Demo1
{
class AnonymousMethod
{
delegate void AmDelegateHandler(int n);
void MultNum(int q)
{
Console.WriteLine("MultNum Method: {0}", q);
}
public void test()
{
AmDelegateHandler adHand = delegate (int value)
{
Console.WriteLine($"delegate: {value}");
};
adHand(34);
adHand = new AmDelegateHandler(MultNum);
adHand(46);
}
}
}
在main中
static void anonymousMethodDemo()
{
AnonymousMethod am = new AnonymousMethod();
am.test();
}
10. 事件 event
让别的类调用自己的 ecLog() 方法
事件只能在本类中调用 其他类只能订阅
namespace Demo1
{
class EventClass
{
/// <summary>
/// 让别的类调用自己的 ecLog() 方法
/// </summary>
public EventClass()
{
OtherClass oc = new OtherClass();
oc.ocLog();
//关联方法 “OtherClass.md”只能出现在 += 或 -= 的左边(从类型“OtherClass”中使用时除外)
oc.md += ecLog;
oc.ocLog();
oc.md += new MyDelegate(ecLog);
oc.ocLog();
}
void ecLog()
{
Console.WriteLine("ecLog()");
}
}
/// <summary>
/// 提供事件接口
/// </summary>
delegate void MyDelegate();
class OtherClass
{
//事件只能在本类中调用 其他类只能订阅
public event MyDelegate md;
public void ocLog()
{
if (md != null)
{
Console.WriteLine("ocLog()");
md();
}
else
{
Console.WriteLine("no ocLog()");
}
}
}
}
11. 对话框Dialog
OpenFileDialog打开文件对话框,从FileDialog类继承,提示用户打开文件,无法继承此类。对于文件的打开操作属于比较常见的。SaveFileDialog保存文件对话框,从FileDialog类继承,提示用户选择文件的保存位置。无法继承此类。FolderBrowserDialog目录浏览对话框,从CommonDialog类继承,提示用户选择文件夹。无法继承此类。FontDialog字体设置对话框,从CommonDialog类继承,提示用户从本地计算机上安装的字体中选择一种字体。可继承该类。ColorDialog颜色设置对话框,从CommonDialog类继承,表示一个通用对话框,该对话框显示可用的颜色以及允许用户定义自定义颜色的控件。可继承该类。PageSetupDialog打印页面设置对话框,从CommonDialog类继承,允许用户更改与页面相关的打印设置,包括边距和纸张方向。无法继承此类。PrintDialog打印对话框,从CommonDialog类继承,允许用户选择一台打印机并选择文档中要打印的部分。无法继承此类。PrintPreviewDialog打印预览对话框,从Form类继承,表示包含 PrintPreviewControl 的对话框窗体。可继承该类。由于该类从Form类继承,所以除了通过 PrintPreviewDialog.ShowDialog (); PrintPreviewDialog.ShowDialog (IWin32Window); 方法以模态方式打开窗体外,还可以通过PrintPreviewDialog.Show ();或其重载PrintPreviewDialog.Show (IWin32Window);方法按正常非模态方式打开。