如何在C#Windows窗体中限制光标移动
本文关键字:光标 移动 窗体 C#Windows | 更新日期: 2023-09-27 18:00:30
有人能给我一个示例代码,将光标限制在Form上吗?我找到了这个(ClipCursor API,它说可以使用它来完成)。我有一个C#Windows窗体应用程序,正在使用VS 2008。
我的代码:
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_CursorChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
MoveCursor ();
}
private void Form1_Resize(object sender, EventArgs e)
{
MoveCursor();
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
MoveCursor();
}
private void MoveCursor()
{
Cursor.Clip = Bounds;
this.Capture = true;
}
}
}
Form1.Designer.cs
namespace WindowsFormsApplication1
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.AutoCompleteCustomSource.AddRange(new string[] {
"all",
"allah",
"allo"});
this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.textBox1.Location = new System.Drawing.Point(30, 70);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(227, 20);
this.textBox1.TabIndex = 0;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Controls.Add(this.textBox1);
this.Cursor = System.Windows.Forms.Cursors.No;
this.Name = "Form1";
this.Text = "Form1";
this.CursorChanged += new System.EventHandler(this.Form1_CursorChanged);
this.Load += new System.EventHandler(this.Form1_Load);
this.Resize += new System.EventHandler(this.Form1_Resize);
this.LocationChanged += new System.EventHandler(this.Form1_LocationChanged);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox1;
}
}
有一个不需要p/invoke的选项:Cursor.Clip
编辑:新代码。在单个文件中填写表单代码。
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Activate(object sender, EventArgs e) {
MoveCursor ();
}
private void Form1_Resize(object sender, EventArgs e) {
MoveCursor();
}
private void Form1_LocationChanged(object sender, EventArgs e) {
MoveCursor();
}
private void MoveCursor()
{
this.Capture = true;
System.Windows.Forms.Cursor.Clip = Bounds;
}
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
this.textBox1.AutoCompleteCustomSource.AddRange(new string[] {"all", "allak", "allo"});
this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.textBox1.Location = new System.Drawing.Point(30, 70);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(227, 20);
this.textBox1.TabIndex = 0;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Controls.Add(this.textBox1);
this.Cursor = System.Windows.Forms.Cursors.No;
this.Name = "Form1";
this.Text = "Form1";
this.Activated += new System.EventHandler(this.Form1_Activate);
this.Resize += new System.EventHandler(this.Form1_Resize);
this.LocationChanged += new System.EventHandler(this.Form1_LocationChanged);
this.ResumeLayout(false);
this.PerformLayout();
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
}
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.TextBox textBox1 = null;
}
}
除非这是一台像售货亭一样特别锁着的电脑,否则用户可能会讨厌它。想想他们是否需要将alt+tab添加到另一个应用程序,将一些东西复制到剪贴板来填写你的表格……只是要小心。