2013-12-22 6 views
2

У меня есть меню с некоторыми кнопками, меню расположено в контейнере инструментальной панели. То, что я пытаюсь сделать, - это открыть новую форму точно в определенном месте на панели инструментов ... Это мой код. Это работает, если я не двигаться ToolStrip меню вниз или справа от ToolStrip контейнера ...Как открыть форму на позиции кнопки инструментальной панели

private System.Windows.Forms.ToolStripButton rbRunMacro; 
private System.Windows.Forms.ToolStrip tsMacroRecorder; 

     private void rbRunMacro_Click(object sender, EventArgs e) 
    { 
     Rectangle rect = this.rbRunMacro.Bounds; 
     Point location = PointToScreen (new Point(this.tsMacroRecorder.Location.X + rect.X, this.tsMacroRecorder.Location.Y + rect.Y)); 
     MacroListForm form = new MacroListForm(); 
     form.StartPosition = FormStartPosition.Manual; 
     form.Location = location ; 
     form.Show(); 
    } 

ответ

2

Вы должны получить расположение rbRunMacro относительно всего экрана (см link).

form.Location = this.tsMacroRecorder.PointToScreen(rbRunMacro.Bounds.Location); 

Причина мы используем ToolStrip.PointToScreen, что ToolStripButton не предлагает метод PointToScreen. Поэтому мы должны использовать ToolStripButton.Location, чтобы получить местоположение rbRunMacro относительно его родительского элемента управления (см. link).

+1

Спасибо, что работает, за исключением того, что вы должны ссылаться на инструментальную панель, потому что toolstripbutton не принимает метод PointToScreen. – Adlorem

+0

Исправлено, см. Править. – Spookbuster