鳕鱼天空

This is Mr Wang's Tech Blog.

Winform实现无边框拖动的两种方式

Winform作为桌面应用程序的一个代表,可以说是C#初学者快速入门最好的一种方式,然而随着我们的开发能力的提升,我们对UI界面的要求变得越来越高,于是我们开始不断优化、升级我们的UI界面。

Winform无边框设计是我们常用的一种方式,无边框设计意味着没有了应用程序的标题栏,也就无法直接拖动,今天主要介绍两种实现无边框拖动的方式。

第一种方式:代码实现

Point mPoint;

private void Panel_MouseDown(object sender, MouseEventArgs e)
{
mPoint = new Point(e.X, e.Y);
}

private void Panel_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);

}
}
            this.MouseDown += Form_MouseDown;
            this.MouseUp += Form_MouseUp;  
            this.MouseMove += Form_MouseMove;

这种方式使用的是自己写代码实现,将这段代码复制到界面代码中,然后选择窗体中的一个控件,比如Panel或者Label,将它们的MouseDown事件绑定代码中的MouseDown事件,MouseMove事件绑定代码中的MouseMove事件,即可。

第二种方式:Windows API

[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;

private void TopPanel_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}

这种方式使用的是Windows底层的API函数,同样将这段代码复制到界面代码中,然后选择窗体中的一个控件,比如Panel或者Label,将它们的MouseDown事件绑定代码中的MouseDown事件,即可。

Windows 10系统开启卓越性能的方法+代码!

首先在搜索栏里找到:Windows PowerShell

找到后以管理员权限打开它

然后输入以下代码回车确认即可!

Powershell命令代码:

powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61

macbook下vscode无法升级的问题

测试环境
macbook 系统版本:


问题描述
下载vsocde后,测试下更新。发现vscode发出以下的报错。

Cannot update while running on a read-only volume. The application is on a read-only volume. Please move the application and try again. If you’re on macOS Sierra or later, you’ll need to move the application out of the Downloads directory. See this link for more information.
解决办法
在终端输入以下命令

sudo chown -R $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt

输入后,回车会提示输入密码。

xattr -dr com.apple.quarantine /Applications/Visual\ Studio\ Code.app


加粗部分为vscode的目录。输入完后,回车。
这样就可以解决出现的问题。
————————————————
版权声明:本文为CSDN博主「啊权」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eason_will_be_good/article/details/125583932

CSS var() 函数 伪代码 变量(包含微信小程序写法)

通过动态绑定style,声明css变量"--bgColor",把变量”color”赋给“--bgColor”

HTML:

<div ref="chart-circle" class="chart-circle" :style="{ '--bgColor': color }"></div>

微信小程序:

<view  class="chart-circle" style="--bgColor:{{color}}"></view>
.chart-circle {
  width: 80px;
  height: 80px;
  position: relative;
  &::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: var(--bgColor);
  }
}

w3shool中演示

JS合并两个数组的方法

转自:微点阅读  https://www.weidianyuedu.com/content/3817386077036.html

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况。比如: var a = [1,2,3]; var b = [4,5,6];有两个数组a、b,需求是将两个数组合并成一个。方法如下:1、concat

js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果。

var c = a.concat(b);//c=[1,2,3,4,5,6];

这里有一个问题,concat方法连接a、b两个数组后,a、b两个数组的数据不变,同时会返回一个新的数组。这样当我们需要进行多次的数组合并时,会造成很大的内存浪费,所以这个方法肯定不是最好的。

2、for循环

大概的思路是:遍历其中一个数组,把该数组中的所有元素依次添加到另外一个数组中。直接上代码:

for(var i in b){ a.push(b[i]);}

这样的写法可以解决第一种方案中对内存的浪费,但是会有另一个问题:丑!这么说不是没有道理,如果能只用一行代码就搞定,岂不快哉~

3、apply

函数的apply方法有一个特性,那就是func.apply(obj,argv),argv是一个数组。所以我们可以利用这点,直接上代码:

a.push.apply(a,b);

调用a.push这个函数实例的apply方法,���时把,b当作参数传入,这样a.push这个方法就会遍历b数组的所有元素,达到合并的效果。

这里可能有点绕,我们可以把b看成[4,5,6],变成这样:

a.push.apply(a,[4,5,6]);

然后上面的操作就等同于:

a.push(4,5,6);

这样就很清楚了!

另外,还要注意两个小问题:

1)以上3种合并方法并没有考虑过a、b两个数组谁的长度更小。

所以好的做法是预先判断a、b两个数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数!

2)有时候我们不希望原数组(a、b)改变,这时就只能使用concat了。