C# 记录

文章目录

基本使用

语法基础

通用类型

在这里插入图片描述

命名空间

在这里插入图片描述

.NET 建议在大多数情况下,都至少要提供两个嵌套的命名空间,第一个是公司名,第二个是技术名或软件名。这么做可以尽量保证不与其它组织编写的命名空间冲突。
在这里插入图片描述

  • 命名空间可以跨文件伸展
  • 命名空间可以嵌套

装箱拆箱

在这里插入图片描述

C#中的变量分为值类型和引用类型两种。值类型变量存储在栈上,比较简单;引用型变量存储在堆上,比较复杂。实际上,值类型是可以转换为引用类型的。装箱操作能把值类型数据打包到引用型变量中,使我们能够像使用对象一样使用值类型变量。
在这里插入图片描述

异常

在这里插入图片描述
在这里插入图片描述

委托

C#中函数的参数都有严格的类型,怎么表示这种“函数参数”的类型呢?这就需要用到委托(Delegate)。委托相当于定义了一种“函数类型”,规定了这类函数的参数类型和返回值类型。

//定义委托
delegate void AnimalPlay(string name);

//函数:马戏表演开始(第一个参数为AnimalPlay 型委托)
static void CircusStart(AnimalPlay animalPlay, string name)
{
    Console.WriteLine("女士们,先生们,我们的马戏表演开始了!");
    animalPlay(name);
}

//函数:狗表演
static void DogPlay(string greetings)
{
    Console.WriteLine("{0},I am Snoopy!", greetings);
}

//函数:猫表演
static void CatPlay(string greetings)
{
    Console.WriteLine("{0},I am Kitty!",greetings);
}

//函数:狮子表演
static void LionPlay(string greetings)
{
    Console.WriteLine("{0},I am Simba!", greetings);
}

//在主函数中使用委托
static void Main(string[] args)
{
    //把函数DogPlay()转换为AnimalPlay 型委托
    AnimalPlay deleDogPlay = new AnimalPlay(DogPlay);
    //把委托deleDogPlay 传给函数CircusStart()
    CircusStart(deleDogPlay, "Good evening");
}

文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为了防止出现同步问题,当一个程序读写文件时,操作系统通常都会阻止其他程序读写该文件,因此使用完毕后要及时关闭,否则就会导致其他程序不能使用该文件。在下面的代码中,我们在using后的括号里创建了一个流对象fs,然后在using后的语句块中使用该流对象。当退出using语句时,系统会自动关闭流对象fs,使用起来非常方便。

using System;
using System.IO;

namespace FileApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = new string[] {"Zara Ali", "Nuha Ali"};
            using (StreamWriter sw = new StreamWriter("names.txt"))
            {
                foreach (string s in names)
                {
                    sw.WriteLine(s);
                }
            }

            // 从文件中读取并显示每行
            string line = "";
            using (StreamReader sr = new StreamReader("names.txt"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }
            Console.ReadKey();
            
        }
    }
}

Environment类

在这里插入图片描述

位运算符和移位运算符

在这里插入图片描述

关于异常的疑难解答

在这里插入图片描述

“解决方案solution”和“项目project”

C#一个解决方案创建多个项目
在这里插入图片描述
在这里插入图片描述

其他

名称描述
sizeof运算符获取数据类型在内存中占用几个字节
typeof 运算符获取数据类型的CTS 类型名
GetType()方法获取某个变量的类型
is运算符检验某个对象是否为某种类型

内置的数据结构

C#-数组、ArrayList、List三者的区别
C#-泛型List

C#初学者教程系列15:ArrayList
C#初学者教程系列16:堆栈Stack
C#初学者教程系列17:Queue
C#初学者教程系列18:Hashtable

使用 partial

为了避免加入的xx.cs文件会出现设计窗口,关键是要修改csproj文件,在相应的文件下加入依赖关系的描述,如下所示,
在这里插入图片描述
在这里插入图片描述

使用皮肤

C#.NET vs2010中使用IrisSkin4.dll轻松实现WinForm窗体换肤功能

使用皮肤后文本框控件刷新不及时

现象如下:
在不使用皮肤时,当下位机向上位机传送一包数据时,上位机的文本框空间能正常刷新;当使用皮肤后,总是有部分文本框的内容无法更新;但上位机切换到另一界面,再切回来后,发现所有文本框的内容都更新了。

尝试了网上介绍的双缓冲使能,没有用;使用了其他博客里提到的修改代码的方法,也没有用;最后,用了一个笨方法,在收到回传数据时,先讲所有的文本框都设为不可见,数据收完后再设为可见。
在这里插入图片描述

确定电脑上安装的net frame work的版本

在这里插入图片描述
在这里插入图片描述

将region区域全部折叠或全部展开

在这里插入图片描述

如何在tabcontrol的不同page页面里拥有公共控件

网上没有找到比较合适的方法,一种变通的方法是例化多个相同的控件,调用相同的回调函数,间接能够达到“控件共享”的效果
在这里插入图片描述

将窗体固定大小

C#图形窗口的几种边框样式,固定大小,及可调节大小等样式
在这里插入图片描述

取消双击窗体时最大、最小

在这里插入图片描述

主窗体与子窗体传递数值信息

在这里插入图片描述

WinForm控件缩略名

在这里插入图片描述

设置textbox的输入字符显示为*

设置TextBox的PasswordChar属性为*即可,
在这里插入图片描述

设置listview中某一行的前景色

ListViewItem lvi = new ListViewItem(DateTime.Now.ToString());
lvi.ForeColor = iColor;

szInfo = "AAA";
lvi.SubItems.Add(szInfo);

szInfo = "BBB";
lvi.SubItems.Add(szInfo);

动态显示tab页

摘自C# winform 中 TabControl 动态显示 TabPage

在这里插入图片描述

通过控件的名称获取控件

方式1

在这里插入图片描述

方式2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace howto_find_control_by_name
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Find the indicated control and set its text.
        private void button1_Click(object sender, EventArgs e)
        {
            // Find the control.
            Control ctl = FindControl(this, textBox1.Text);
            if (ctl==null)
            {
                MessageBox.Show("Could not find control '" +
                    textBox1.Text + "'");
                return;                    
            }

            // Set its Text property.
            ctl.Text = textBox2.Text;
        }

        // Recursively find the named control.
        private Control FindControl(Control parent, string name)
        {
            // Check the parent.
            if (parent.Name == name) return parent;

            // Recursively search the parent's children.
            foreach (Control ctl in parent.Controls)
            {
                Control found = FindControl(ctl, name);
                if (found != null) return found;
            }

            // If we still haven't found it, it's not here.
            return null;
        }
    }
}

方式3

private void button2_Click(object sender, EventArgs e) {
    ((Button)(this.Controls.Find("button1", false)[0])).Text = "123";
}

安装扩展文件

安装本地的扩展文件

在这里插入图片描述

安装数学计算相关的包

在这里插入图片描述
在这里插入图片描述

打包exe

将dll打包到exe中(使用Costura.Fody插件)

参考使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件

注意两个扩展项安装的版本,
在这里插入图片描述
另外,还需要创建一个FodyWeavers.xml文件,内容如下

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <ExcludeAssemblies>
    </ExcludeAssemblies>
  </Costura>
</Weavers>

打包成exe(使用BoxedAppPacker)

参考
如何C#生成EXE程序
How to pack a perl script into a single executable file?
Packaging .NET Core application into a single executable file package

在这里插入图片描述

使用这个方法,有两个问题:

  • 有的时候,杀毒软件会报毒
  • 当使用devexpress的皮肤时,如果直接在project settings中设置皮肤的话,打包成exe后,皮肤不能正常显示;但是,当使用defaultLookAndFeel控件设置皮肤,再打包到exe中时,皮肤能正常显示
    在这里插入图片描述

打包成exe(使用Turbo Studio)

在这里插入图片描述
下图虽然模糊,但更详细,
在这里插入图片描述

问题

1.命名空间不能直接包括字段或方法

命名空间不能直接包括字段或方法

2.对象对于引用非静态字段、方法或属性是必需的

.net 非静态的字段、方法或属性 要求对象引用

3.C# .NET4.0 改为 到.NET2.0

C# .NET4.0 改为 到.NET2.0 报错解决方法

小例子

判断字符串空白

string.IsNullOrWhiteSpace(txt_name.Text.Trim())

获取指定类型的文件,合并成一个文件

public void merge_all_files_2_single(string merge_file,string [] files_ay)
{
    int index = 0;
    foreach (string file in files_ay)
    {
        if (index == 0)
        {
            File.WriteAllText(merge_file, File.ReadAllText(file, Encoding.Default), Encoding.UTF8);
        }
        else
        {
            File.AppendAllText(merge_file, File.ReadAllText(file, Encoding.Default), Encoding.UTF8);
        }
        index++;
    }
}

private void simpleButton1_Click(object sender, EventArgs e)
{
    if (xtraFolderBrowserDialog1.ShowDialog() == DialogResult.OK)
    {
        var dir_path = xtraFolderBrowserDialog1.SelectedPath;
        var vhd_files = Directory.GetFiles(dir_path, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".vhd") || s.EndsWith(".vhdl")).ToArray();
        var verilog_files = Directory.GetFiles(dir_path, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".v")).ToArray();

        merge_all_files_2_single("all_vhd.vhd", vhd_files);
        merge_all_files_2_single("all_ver.v", verilog_files);
    }
}

运行cmd命令

public static void ExecuteShellCommand(string command)
{
    var ProcessInfo = new ProcessStartInfo("cmd.exe", "/C " + command)
    {
        WindowStyle = ProcessWindowStyle.Hidden,
        CreateNoWindow = true,
        UseShellExecute = true
    };
    Process.Start(ProcessInfo);
}

将string和byte数组互转

public byte[] GetBytes(string str)
{
    return Encoding.UTF8.GetBytes(str);
}

public string ParseToString(byte[] utf8Bytes)
{
    return Encoding.UTF8.GetString(utf8Bytes);
}

运行内嵌的exe->将其提取到临时文件夹下,用完删除

private void button1_Click(object sender, EventArgs e)
{
    byte[] exeBytes = Properties.Resources.hex2bin;
    string exeToRun = Path.Combine(Path.GetTempPath(), "hex2bin.exe");

    if (File.Exists(exeToRun))
    {
        File.Delete(exeToRun);
    }

    using (FileStream exeFile = new FileStream(exeToRun, FileMode.CreateNew))
        exeFile.Write(exeBytes, 0, exeBytes.Length);

    string cmd_line = exeToRun + " -b test.mcs";

    ExecuteShellCommand(cmd_line);

    File.Delete(exeToRun);
}

字节数组转16进制字符串/将16进制的字符串转为byte[]

public static string ByteToHexStr(byte[] bytes)
{
    string returnStr = "";
    if (bytes != null)
    {
        for (int i = 0; i < bytes.Length; i++)
        {
            returnStr += bytes[i].ToString("x2");
        }
    }
    return  returnStr;
}

/// <summary>
/// 字节数组转16进制字符串:空格分隔
/// </summary>
/// <param name="byteDatas"></param>
/// <returns></returns>
public static string ToHexStrFromByte(byte[] byteDatas)
{
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < byteDatas.Length; i++)
    {
        builder.Append(string.Format("{0:x2} ", byteDatas[i]));
    }
    return builder.ToString().Trim();
}

/// <summary>
/// 将16进制的字符串转为byte[]
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] StrToHexByte(string hexString)
{
    hexString = hexString.Replace(" ", "");
    if ((hexString.Length % 2) != 0)
        hexString += " ";
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
        returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    return returnBytes;
}

高阶使用

与MATLAB混合使用

C#与Matlab混合编程中遇到的“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常

NET Reactor使用

.NET Reactor 工具,采用了NecroBit加密技术,可以将.NET 程序集编译成本地代码文件而不是CIL中间语言文件

在这里插入图片描述
在这里插入图片描述

NPOI使用

nuget官网下载NPOI
npoi-examples
Getting Started with NPOI

scottplot使用

安装scottplot后toolbox中没有对应插件

参考>C# scottplot插件下载安装(工具箱中无控件问题)

比较折腾,简述一下情况,VS版本是VS2015,

  • 一开始是在官网上下载scottplot winform对应的nupkg文件,安装最新的版本,结果在工具箱中没有出现对应的控件
  • 之后上网看,有人遇到类似情况,说手动安装可以成功,于是尝试了一下,提示dll中“没有可放置在工具箱上的组件”,又查了一下,有人说是因为路径下有特殊字符,与我的实际情况不符
  • 之后通过VS中NuGet手动选择scottplot winform的V4.1.48版本,再手动安装dll,工具箱就成功出现了控件

在这里插入图片描述

软件License设计

软件License设计

C#反编译方法

针对已经加壳的exe文件,可以使用de4dot工具进行脱壳,使用的命令如下,
在这里插入图片描述
效果如下,
在这里插入图片描述

DevExpress

控件简要说明

专栏-WinForm

ToolTip

不少控件都具有ToolTip属性,可以比较方便的设置提示信息,
在这里插入图片描述

鼠标光标图形设置

可以通过设置cursor属性来设置鼠标的形状,
在这里插入图片描述

DropDownButton控件

在这里插入图片描述

CheckedListBoxControl控件

单击即选中的方法如下所示,
在这里插入图片描述
修改item文本描述的方法如下所示,
在这里插入图片描述

博文链接

Dev使用checkedListBoxControl
关于CheckedListBoxControl的选中
CheckedListBoxControl 实现复选框的单选与多选功能

CheckButton控件

设置Button图案的方法如下所示,
在这里插入图片描述

radioGroup控件

横排显示radio选项,如下所示,
在这里插入图片描述

博文链接

Dev RadioGroup 用法

xtraTabControl控件

设置tab页面名称,如下所示,
在这里插入图片描述

LayoutControl控件

改变layout的大小
当将LayoutControl控件拖到窗体之后,最开始在属性窗口看到的是llayoutControl控件的属性;默认情况下,autosize属性是不使能的,此时只能通过手动边框改变layout的大小;再之后,如果在窗体上点击layoutcontrol所在的位置,就只能看到root了,这时是没有办法改变layout的大小的;如果想改变大小,可以通过在属性中浏览选中layoutControl控件的属性,就能再一次选中layoutControl控件,改变layout大小了。
在这里插入图片描述
生成一个匹配的label控件

拖入textedit控件、buttonedit控件后,会自动生成一个匹配的label控件

设置文字到控件的间距

设置TextToControlDistance属性

设置各子控件之间的间距

设置子控件的Spacing属性

博文链接

DevExpress_LayoutControl使用
界面开发工具DevExpress WinForms使用教程:Cheat Sheet - LayoutControl调整大小机制
DevExpress - LayoutControl基础使用

GridView

//view行中值居左
gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
//view列标题居左                    
gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
/// <summary>
/// 手动设置表格的宽度
/// </summary>
/// <param name="gridView">gridView表格控件</param>
/// <param name="startColumnIndex">开始列的索引</param>
/// <param name="endColumnIndex">结束列的索引</param>
/// <param name="width">列的宽度</param>
public static void MaualSetGridViewWidth(DevExpress.XtraGrid.Views.Grid.GridView gridView, int startColumnIndex, int endColumnIndex,int width)
{
    if (gridView != null && startColumnIndex >= 0 && endColumnIndex > 0 && endColumnIndex>=startColumnIndex
        && width > 0)
    {
        for (int i = startColumnIndex; i < endColumnIndex; i++)
        {
            gridView.Columns[i].OptionsColumn.FixedWidth = true;
            gridView.Columns[i].Width = width;
        }
    }
}

/// <summary>
/// 手动设置表格的宽度
/// </summary>
/// <param name="bandedGridView">bandedGridView表格控件</param>
/// <param name="startColumnIndex">开始列的索引</param>
/// <param name="endColumnIndex">结束列的索引</param>
/// <param name="width">列的宽度</param>
public static void MaualSetGridViewWidth(BandedGridView bandedGridView,int startColumnIndex, int endColumnIndex,int width)
{
    if (bandedGridView != null && startColumnIndex >= 0 && endColumnIndex > 0 && endColumnIndex >= startColumnIndex
        && width > 0)
    {
        for (int i = startColumnIndex; i < endColumnIndex; i++)
        {
            bandedGridView.Bands[i].OptionsBand.FixedWidth = true;
            bandedGridView.Bands[i].Width = width;
        }
    }
}

/// <summary>
/// 根据内容自动适配列的宽度
/// </summary>
/// <param name="gridView">gridView表格控件</param>
private static void AutoFitColumnWidthOfContent(DevExpress.XtraGrid.Views.Grid.GridView gridView)
{
    //表格列自动适配
    gridView.BestFitColumns();
    gridView.OptionsView.BestFitMode = GridBestFitMode.Fast;
}


//--------------------------------------------------------------------------------------

//动手设置列宽度
private void simpleButton8_Click(object sender, EventArgs e)
{
    //手动设置表格的宽度
    MaualSetGridViewWidth(bandedGridView1, 0,4,360);

    //打开横向滑动条[为false表示打开]
    bandedGridView1.OptionsView.ColumnAutoWidth = false;

}

//列根据内容自适应宽度
private void simpleButton9_Click(object sender, EventArgs e)
{
    //根据内容自动适配列的宽度
    AutoFitColumnWidthOfContent(bandedGridView1);
}
博文链接

DevExpress中自动、手动调整GridView的列宽度

GridControl控件

  • GridView的行头号默认没有显示,需要在事件CustomDrawRowIndicator中绘制行头号
  • GridView默认的行头宽度较小,往往都需要设置GridView.IndicatorWidth属性来设置宽度
  • GridView提供TopRowChanged事件,当数据滚动的时候,就会触发到这个事件。
    在这里插入图片描述

隐藏 最上面的GroupPanel

//禁止 显示"drag a column header here to group by that column"
gridView1.OptionsView.ShowGroupPanel = false;       

修改 最上面的GroupPanel内容

gridView1.GroupPanelText="test text";

设置 数据源

gridControl1.DataSource = CreateData();             //绑定 数据源

private DataTable CreateData()
{
     DataTable dt = new DataTable();

     dt.Columns.Add("源地址", typeof(string));
     dt.Columns.Add("目的地址", typeof(string));
     dt.Columns.Add("数据区", typeof(string));
     return dt;
 }

新增一行

方法1 使用InitNewRow事件

private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
{
    gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["源地址"], g_gridViewItem.strSrc);
    gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["目的地址"], g_gridViewItem.strDst);
    gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["数据区"], g_gridViewItem.strData);
}

private void simpleButton4_Click(object sender, EventArgs e)
{
    g_iSrc++;
    g_iDst++;
    g_iData++;

    g_gridViewItem.strSrc = g_iSrc.ToString();
    g_gridViewItem.strDst = g_iDst.ToString();
    g_gridViewItem.strData = g_iData.ToString();

    gridView1.AddNewRow();
}

方法2 直接操作datatable

private void simpleButton4_Click(object sender, EventArgs e)
{
     g_iSrc++;
     g_iDst++;
     g_iData++;

     g_gridViewItem.strSrc = g_iSrc.ToString();
     g_gridViewItem.strDst = g_iDst.ToString();
     g_gridViewItem.strData = g_iData.ToString();

     DataTable dt = gridControl1.DataSource as DataTable;
     DataRow newRow = dt.NewRow();
     newRow["源地址"] = g_gridViewItem.strSrc;
     newRow["目的地址"] = g_gridViewItem.strDst;
     newRow["数据区"] = g_gridViewItem.strData;
     //dt.Rows.InsertAt(newRow, 0); //插入到第一行
     dt.Rows.Add(newRow); //插入到最后一行
 }

删除焦点所在的行

private void simpleButton10_Click(object sender, EventArgs e)
{
    DataTable dt = gridControl1.DataSource as DataTable;
    dt.Rows.RemoveAt(gridView1.FocusedRowHandle);
    dt.AcceptChanges();
}

允许 显示行号

gridView1.OptionsView.ShowIndicator = true;         

禁止 对表内元素进行编辑

gridView1.OptionsBehavior.Editable = false;

禁止 禁止 显示表格的竖线、横线

gridView1.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.False; 
gridView1.OptionsView.ShowHorizontalLines = DevExpress.Utils.DefaultBoolean.False;         

去除"Click here to add a new row"

gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.None

设置焦点行的颜色

private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e)
{
    GridView view = sender as GridView;
    if (view == null) return;
    if (e.RowHandle != view.FocusedRowHandle)
    {
        e.Appearance.ForeColor = Color.Black;
    }
    else
    {
        e.Appearance.ForeColor = Color.Red;
    }
}
博文链接

DevExpress GridControl使用方法
Add new Row to GridView on Button Click in ASP.Net
DevExpress GridControl的使用

ChartControl控件

example
Series series1 = new Series("曲线1", ViewType.Spline);
Series series2 = new Series("曲线2", ViewType.Spline);

series1.Points.Add(new SeriesPoint(1, 2));
series1.Points.Add(new SeriesPoint(2, 5));
series1.Points.Add(new SeriesPoint(3, 3));
series1.Points.Add(new SeriesPoint(4, 8));
chartControl2.Series.Add(series1);
series1.ArgumentScaleType = ScaleType.Numerical; //类型
series1.ValueScaleType = ScaleType.Numerical;    //y轴类型
series1.CrosshairLabelPattern = "{S}:{A}:{V}"; //设置鼠标悬停后提示框显示格式 {S}-名称 {A}-X轴值 {V}-Y轴值 
((LineSeriesView)series1.View).LineStyle.DashStyle = DashStyle.Dot;         //线条的类型,虚线,实线
((LineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.True;      //marker是否可见
((LineSeriesView)series1.View).LineMarkerOptions.Kind = MarkerKind.Circle;  //定义线条上的marker形状  

series2.Points.Add(new SeriesPoint(2, 4));
series2.Points.Add(new SeriesPoint(3, 7));
series2.Points.Add(new SeriesPoint(4, 5));
series2.Points.Add(new SeriesPoint(5, 10));
chartControl2.Series.Add(series2);
series2.ArgumentScaleType = ScaleType.Numerical;
series2.ValueScaleType = ScaleType.Numerical;
series2.CrosshairLabelPattern = "{S}:{A}:{V}"; //设置鼠标悬停后提示框显示格式 {S}-名称 {A}-X轴值 {V}-Y轴值
((LineSeriesView)series2.View).LineStyle.DashStyle = DashStyle.Solid;       //线条的类型,虚线,实线
((LineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.True;      //marker是否可见
((LineSeriesView)series2.View).LineMarkerOptions.Kind = MarkerKind.Square;  //定义线条上的marker形状

XYDiagram diagram = (XYDiagram)chartControl2.Diagram;
diagram.AxisX.Title.Text = "横坐标";
diagram.AxisX.Title.Visibility = DefaultBoolean.True; 
diagram.AxisX.Title.Alignment = StringAlignment.Center;
diagram.AxisX.Title.EnableAntialiasing = DefaultBoolean.True;
diagram.AxisX.Title.Font = new Font("Tahoma", 12, FontStyle.Bold);

diagram.AxisY.Title.Visibility = DefaultBoolean.True;
diagram.AxisY.Title.Alignment = StringAlignment.Center;
diagram.AxisY.Title.Text = "纵坐标";
diagram.AxisY.Title.EnableAntialiasing = DefaultBoolean.True;
diagram.AxisY.Title.Font = new Font("Tahoma", 12, FontStyle.Bold);

diagram.Rotated = false;
diagram.AxisY.ConstantLines.Clear();
ConstantLine constantLine1 = new ConstantLine("常量-线", 5);
constantLine1.Color = Color.Red;             //直线颜色
constantLine1.Title.TextColor = Color.Red;   //直线文本字体颜色      
diagram.AxisY.ConstantLines.Add(constantLine1);

diagram.AxisX.VisualRange.Auto = false;
diagram.AxisX.WholeRange.Auto = false;
diagram.AxisX.WholeRange.AutoSideMargins = false;
diagram.AxisX.WholeRange.SideMarginsValue = 0;
diagram.AxisX.WholeRange.SetMinMaxValues(0, 30);
diagram.AxisX.VisualRange.SetMinMaxValues(0, 8);

//使能放大
diagram.ZoomingOptions.UseMouseWheel = true;         //鼠标滚轮 放大
diagram.ZoomingOptions.UseKeyboardWithMouse = true;  //shift+鼠标选中区域 放大
diagram.EnableAxisXScrolling = true;  //X轴是否允许滚动
diagram.EnableAxisXZooming   = true;  //X轴是否允许缩放
diagram.EnableAxisYScrolling = true;  //Y轴是否允许滚动
diagram.EnableAxisYZooming   = true;  //Y轴是否允许缩放
diagram.PaneLayout.Direction = PaneLayoutDirection.Horizontal; //窗格的对齐方式

chartControl2.Titles.Add(new ChartTitle());
chartControl2.Titles[0].Text = "标题";
chartControl2.Titles[0].Font = new Font("Tahoma", 14, FontStyle.Bold);
chartControl2.Dock = DockStyle.Fill;
博文链接

DEV
WinForm DevExpress使用之ChartControl控件绘制图表一——基础
DevExpress中chartControl中实现统计图功能
C# devexpress chartcontrol 代码控制X轴显示范围
DevExpress chartControl 基本结构说明
WinForm DevExpress使用之ChartControl控件绘制图表二——进阶

XtraMessageBox

XtraMessageBox.Show("用户名或密码不能为空!");
XtraMessageBox.Show("用户或密码不正确!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

其他

设置皮肤

在这里插入图片描述

更换皮肤

按照如下方式操作即可,
在这里插入图片描述
在这里插入图片描述

去除多国语言包

在这里插入图片描述
将安装目录下的de、es、ja、ru等语言包移到一个文件夹下,进行备份;清空输出,重新生成
在这里插入图片描述

博文链接

DevExpress去除多国语言包

获取帮助

在 Visual Studio 中,选择工具箱或窗体中的控件/组件,然后按 F1 可以打开在线帮助,
在这里插入图片描述

分析必备的库

Assembly Deployment Tool

解决“上位机无法在未安装Dev的电脑上打开”的问题

参考dev应用程序在其他电脑不能运行

不能运行的原因是:dev所需的dll文件在其他电脑上不存在,在加载应用程序的时候就会出现错误。参考上述链接进行应用程序的发布,将依赖的dll文件包括到安装包中,在电脑上安装后使用,
在这里插入图片描述

修改sln和project工程名

摘自修改sln和project工程名
在这里插入图片描述

博文链接

c# Helper(非常好)
C#——Marshal.StructureToPtr方法简介
c#中Marshal.Copy()方法的使用
StructLayout特性
C#中的IntPtr类型
如何让IntPtr指向一块内存,以及托管内存与非托管内存的相互转化
C#结构体指针的定义及使用详解(intptr的用法)
.Net工程详解及项目版本管理
using语法糖
C#-老生常谈的 值类型与引用类型
C#using和using static 指令
强大的Winform Chart图表控件使用说明
c# Chart设置样式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值