كيفية تراكب عنصر تحكم على سطح التعليمات البرمجية ل Visual ستوديو

StackOverflow https://stackoverflow.com/questions/1619219

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا أكتب على الدين إلى SQL Server إدارة Studio، وذلك باستخدام ستوديو قابلية الامتداد واجهات برمجة التطبيقات البصرية. لقد كان بعض النجاح تتراكب عنصر تحكم على سطح النص (أنا محاولة لمحاكاة قائمة العمل CodeRush / ريفاكتور، على غرار السرد التحسس)، ولكن أنا يمكن تحديد موقع فقط انها تنسيق الفضاء مقرها الخاصية التالية:

get
{
    var point = TextDocument.Selection.TopPoint;
    return new Cursor( point.DisplayColumn, point.Line );
}

وهذا الرمز لا تسمح لي أن ثم تحويل العواميد / الصفوف إلى بكسل، ولكن لا أستطيع أن أجد وسيلة للتعويض عن العواميد / الصفوف عندما تم تمريره محرر النصوص إما عموديا أو أفقيا. هذا يسبب مربع القائمة إلى تختفي تحت مساحة الشاشة مرئية.

ما أنا تبحث عن طريقة الحصول على إحداثيات الشاشة من الزوج العقيد / الصف الحالي، لدرجة أنني يمكن أن تضع مربع القائمة بجانب المؤشر، بغض النظر عن موقف تمريره.

هل كانت مفيدة؟

المحلول

والخاصية TextDocument.Selection، من نوع TextSelection، له خاصية TextPane - راجع <لأ href = "http://msdn.microsoft.com/en-us/library/envdte.textpane.aspx" يختلط = "نوفولو noreferrer "> هنا لمزيد من المعلومات. أنه لا يقول ذلك صراحة، ولكن TextPane هو جزء من الشاشة التي مرئيا. وعلاوة على ذلك، الخاصية StartPoint لTextPane توفر "تعويض" من النص تمريره.

وبالتالي كنت قادرا على تحديد موضع المؤشر يقابله طرح TextPane.StartPoint من StartPoint التحديد ل:

get
{
    var start = TextDocument.Selection.TextPane.StartPoint;
    var top = TextDocument.Selection.TopPoint;
    return new Cursor( 
        top.DisplayColumn - start.DisplayColumn + 1 , 
        top.Line - start.Line + 1 
    );
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top