2013-09-30 104 views
0

你好我有這樣的代碼:上的鼠標位置位置創建新標籤

private Label newLabel = new Label(); 
Int32   mouseX; 
Int32   mouseY; 

private void form_MouseMove(object sender, MouseEventArgs e) 
{ 
    mouseY = Cursor.Position.Y; 
    mouseX = Cursor.Position.X; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    int txt = Int32.Parse(textBox1.Text); 

    for (int i = 0; i < txt; i++) 
    { 
     newLabel = new Label(); 
     newLabel.Location = new Point(mouseY, mouseX); 
     newLabel.Size = new System.Drawing.Size(25, 25); 
     newLabel.Text = i.ToString(); 
     newLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
     newLabel.ForeColor = Color.Red; 
     newLabel.Font = new Font(newLabel.Font.FontFamily.Name, 10); 
     newLabel.Font = new Font(newLabel.Font, FontStyle.Bold); 
     newLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 
     newLabel.MouseMove += new MouseEventHandler(this.MyControl_MouseMove); 
     newLabel.MouseDown += new MouseEventHandler(this.MyControl_MouseDown); 
     this.Controls.Add(newLabel); 
    } 
} 

我儘量做到根據鼠標的位置創建一個標籤,但它似乎與位置創建在整個顯示器內。我認爲,如果我將座標分配給form mouse move,它將獲得表格中的座標。 有人可以幫我解決這個問題嗎?

+0

這只是不會工作,鼠標位置將永遠非常接近按鈕。您需要考慮一種非常不同的用戶界面,類似於拖放。 –

回答

3

Cursor.Position座標相對於整個屏幕。您需要一個相對於表單左上角的位置。你可以簡單地獲取信息從MouseEventArgs傳遞到您的MouseMove事件處理程序

private void form_MouseMove(object sender, MouseEventArgs e) 
    { 
     mouseY = e.Location.Y; 
     mouseX = e.Location.X; 
    } 

MouseEventArgs.Location屬性是(根據MSDN)

包含x軸和y鼠標座標的一個點,以像素爲單位, 相對於窗體的左上角。