Как ограничить движение курсора в форме C # Windows? - PullRequest
0 голосов
/ 26 июня 2011

Может кто-нибудь дать мне пример кода, чтобы ограничить курсор на форме.Я нашел это ( 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;
   }
  }

1 Ответ

2 голосов
/ 26 июня 2011

Существует опция, которая не требует от вас 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 в другое приложение, чтобы скопировать что-то в буфер обмена и заполнить вашу форму ... Просто будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...