C# 语法小记

概要:

C# 语法小记

| |目录

保持窗体最前

this.TopMost = true;

将字符串S转化为Keys.S

Keys s = (Keys)Enum.Parse(typeof(Keys), "S");

picBox 上标签透明(窗体设计器)

this.Controls.Add(this.pictureBox1);
pictureBox1.Controls.Add(label1);
label1.BackColor = Color.Transparent;

毛玻璃窗体

[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
    public int Left;
    public int Right;
    public int Top;
    public int Bottom;
}
 
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
 
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();
 
protected override void OnLoad(EventArgs e)
{
    if (DwmIsCompositionEnabled())
    {
        MARGINS m = new MARGINS();
        m.Right = m.Left = m.Top = this.Width + this.Height;
        DwmExtendFrameIntoClientArea(this.Handle, ref m);
    }
    base.OnLoad(e);
}
 
protected override void OnPaintBackground(PaintEventArgs e)
{
    base.OnPaintBackground(e);
    if (DwmIsCompositionEnabled())
    {
        e.Graphics.Clear(Color.Black);
    }
}

窗体侧边栏隐藏

private void timerShowHide_Tick(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        Point cursorPoint;
        cursorPoint = new Point(Cursor.Position.X, Cursor.Position.Y - 5); //获取鼠标在屏幕的坐标点
        if (this.Left == -3 - this.Width)//当窗体在左面隐藏时
            cursorPoint = new Point(Cursor.Position.X - 5, Cursor.Position.Y - 5);
        Rectangle Rects = new Rectangle(this.Left - 8, this.Top - 8, this.Left + this.Width, this.Top + this.Height);//存储当前窗体在屏幕的所在区域
        bool prInRect = PtInRect(ref Rects, cursorPoint);
        if (prInRect)
        {//当鼠标在当前窗体内
            if (this.Top < 0)//窗体的Top属性小于0
                this.Top = 0;
            else if (this.Left < 0)//窗体的Left属性小于0
                this.Left = 0;
            else if (this.Right > Screen.PrimaryScreen.WorkingArea.Width)//窗体的Right属性大于屏幕宽度
                this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
        }
        else
        {
            if (this.Top < 5)               //当窗体的上边框与屏幕的顶端的距离小于5时
                this.Top = -3 - this.Height; //将窗体隐藏到屏幕的顶端
            else if (this.Left < 5)         //当窗体的左边框与屏幕的左端的距离小于5时
                this.Left = -3 - this.Width; //将窗体隐藏到屏幕的左端
            else if (this.Right > Screen.PrimaryScreen.WorkingArea.Width - 5)//当窗体的右边框与屏幕的右端的距离小于5时
                this.Left = Screen.PrimaryScreen.WorkingArea.Width + 3;//将窗体隐藏到屏幕的右端
        }
    }
}

进程唯一

private void RunAProcessAtOnce()
{
    System.Diagnostics.Process[] pProcesses = System.Diagnostics.Process.GetProcessesByName(
        System.Diagnostics.Process.GetCurrentProcess().ProcessName);
    if (pProcesses.Length > 1)
    {
        Application.Exit();
        return;
    }
}

鼠标拖动

//全局变量
Point oldPoint = new Point(0, 0);
bool mouseDown = false;
 
//鼠标事件
void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (mouseDown)
    {
        this.Left += (e.X - oldPoint.X);
        this.Top += (e.Y - oldPoint.Y);
        left = this.Left;
        top = this.Top;
    }
}
 
void Form1_MouseDown(object sender, MouseEventArgs e)
{
    oldPoint = e.Location;
    mouseDown = true;
}
void Form1_MouseUp(object sender, MouseEventArgs e)
{
    mouseDown = false;
}

Form1窗体初始化不可见

WindowState : Minimized;
ShowInTaskbar : false;
Load 事件 :this.visable = false;

datagridview 某列不允许为空

if (this.ShowHostKey.CurrentCell.OwningColumn.HeaderText != "名称")
{
    if (this.ShowHostKey.Rows[e.RowIndex].Cells["name"].Value == null)
    {
        MessageBox.Show("名称不允许为空!");
        e.Cancel = true;
    }
}

判断是不是文件(夹)/文件(夹)是否存在

if(!Directory.Exists("c:\\hh"))//如果是文件夹的话
Directory.CreateDirectory("c:\\hh");
 
if(!File.Exists("c:\\hh"))//如果是文件的话
File.Create("c:\\hh\\1.txt");

通过注册表判定是否是第一次运行程序 并添加启动项

//引用
using System;
using System.Diagnostics;
using System.Windows.Forms;
using Microsoft.Win32;
 
/// <summary>
/// 添加到注册表
/// </summary>
/// <param name="id">执行序号</param>
public void Register(int id)
{
    Path = Process.GetCurrentProcess().MainModule.FileName;//获取程序路径
    String xpath = Path.Substring(0, Path.LastIndexOf(@"\"));//XStart 路径
 
    RegistryKey hklm = Registry.LocalMachine;//注册表Machine 列表下
    RegistryKey hksoft = Registry.CurrentUser;//注册表User 列表下
    RegistryKey run = hklm.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");//访问Run
    RegistryKey xStart = hksoft.CreateSubKey(@"SOFTWARE\XStart");//新建 XStart 项
 
    switch (id)
    {
        case 1: //添加开机启动
            if (run != null) run.SetValue("XStart", Path);
            break;
        case 2: //删除开机启动 会产生不存在XStart键值异常
            try { if (run != null) run.DeleteValue("XStart"); }
            catch { MessageBox.Show("未设置开机启动!"); }
            break;
        case 3:
            //通过查看是否含有XStart注册表项判断是否是第一次启动,如果是 设置启动项并添加注册表
            //当然你也可以进行许多其他的操作 不过,这种方式如果手动删除注册表会让程序认为是第一次启动
            //但是相对来说还是比较安全的方式,毕竟大多数人不会自己去操作注册表 
            if (xStart.GetValue("Path") == null)
            {
                Register(1);
                xStart.SetValue("Path", xpath);
            }
            else
            {   //如果更换程序位置
                String path = xStart.GetValue("Path").ToString();
                if (!(path.Equals(xpath)))
                {
                    //如果已存在启动项,更新注册表
                    if(run.GetValue("XStart") != null)
                        Register(1);
                    xStart.SetValue("Path", xpath); //更新XStart 注册表
                }
            }
            //判断是否开机启动
            if (run != null && run.GetValue("XStart") != null)
            {
                String R = run.GetValue("XStart").ToString();
                if (R.Equals(Process.GetCurrentProcess().MainModule.FileName))
                    //ischecked = true;
                    //这里是判断是否开机启动 可以用于“设置”里面的“开机启动”属性是否打钩,或者其余用途
            }
            break;
    }
    hklm.Close();
    hksoft.Close();
    if (run != null) run.Close();
    if (xStart != null) xStart.Close();
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消