كيفية منع التمرير على التجديد في PropertyGrid؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

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

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

والمشكلة هي أنه في التجديد () سيطرة مخطوطات تلقائيا البند الشبكة في طريقة العرض (الغريب أنها لا تفعل هذا عندما كان العنصر فوق الجزء العلوي من السيطرة).

وأنا أبحث عن وسيلة لمنع إما هذا، أو لإنقاذ الدولة، تفعل التجديد ()، ثم قم بتعيين مرة أخرى. حاولت الحصول على VScrollBar الكامنة في PropertyGridView داخل PropertyGrid، والعبث مع "القيمة"، لكنه لا يبقى تعيين دائم. الملوثات العضوية الثابتة دائما الى الوراء وبالتالي فإن البند هو في الرأي.

وإلغاء تحديد هذا البند أثناء التمرير هو بلدي الاحتياطية (لا يحدث التمرير حيز عرض السيارات مع أي بند الشبكة المختارة) ولكنه يضر الاستخدام قليلا حتى أنا أبحث عن وسيلة أخرى.

ولأي شخص يعمل في شيء مماثل؟

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

المحلول

وهذا غير ممكن في MS PropertyGrid. هذا المكون كثيرة جدا الداخلية غير ممكن لتعطيك المرونة التي تطلبها، وكما كنت أدرك نفسك أنه لا يتفق (لديك قضية لخاصية أدناه الشبكة ولكن ليس عندما يكون أعلاه). هذا هو السبب في أنني خلقت الذكية PropertyGrid.Net . إذا كان المنتج التجاري هو خيار بالنسبة لك، هذه الشبكة لديه خيار لتخزين الدول الملكية واستعادتها بعد إجراء هذا العمل على الشبكة (مثل تجديد ()) من دون أي بارقة.

نصائح أخرى

وجدت أنا 'هاء والإختراق مثيرة للاهتمام:

ويمكنك اختيار يدويا البنود شبكة قمت بتغيير وأنها سوف تحديث:)

var panProp = categ.GridItems[3];
var tiltProp = categ.GridItems[4];
panProp.Select();
tiltProp.Select();

وهكذا I تحديد عناصر أحتاج ومن تحريك التحديد إلى الوراء

وبالنسبة لي جعلت ما يلي الفرق:

ولا تعيين وجوه جديدة.

وببساطة تحديث الحقول الكائن القديمة مع البيانات الجديدة.

والآن، على التحديث، يا PropertyGrid لا تمرير أي أكثر، ويظهر أيضا تحديث المحتوى.

public void SoftRefreshPropertyGrid()
{
     var peMain = propertyGrid.GetType().GetField("peMain", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(propertyGrid)as  System.Windows.Forms.GridItem;
     if (peMain != null)
     {
           var refreshMethod = peMain.GetType().GetMethod("Refresh");
           if (refreshMethod != null)
           {
                  refreshMethod.Invoke(peMain, null);
                  propertyGrid.Invalidate(true);
           }
     }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top