كيف يمكن للمرء حساب الحد الأدنى لحجم _client_ من شكل النوافذ صافي؟

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

سؤال

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

وهذا يسبب للأسف الواردة ضوابط لترفض تعديل. في هذا السيناريو استخدام معين، استخدام ضوابط التخطيط التلقائي (مثل لوحة تخطيط التدفق) ليس حلا قابلا للتطبيق.

وأنا يجب أن يكون في عداد المفقودين شيء واضح حقا - هل هناك طريقة أفضل للقيام بذلك

والاعتذار إذا كان هذا السؤال يبدو البكم

وشكرا جزيلا ديف

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

المحلول

والطريقة الوحيدة لقد وجدت من أنها تعمل بدقة من هو أن تفعل شيئا مثل:

int delta = this.Height - this.ClientRectangle.Height;

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

وهكذا بالنسبة لك:

int delta = this.Height - this.ClientRectangle.Height;
int actualMinHeight = this.MinimumSize.Height - delta;

وHTH

وتحرير: أنا لم حاول استخدام SystemInformation.Border3DSize وSystemInformation.BorderSize الخصائص ولكنها أيضا لم تعط بعرض الصحيحة بالنسبة لي

.

نصائح أخرى

وأنا لست متأكدا 100٪ إذا كنت تسأل عن وسيلة لتكون قادرة على تغيير حجم عناصر التحكم بشكل حيوي في وقت التشغيل استنادا إلى النموذج، سمك الحدود، رمز تباعد الخ، ومع ذلك، إذا كان هذا يحصل downvoted، لا بد لي نفسي أن يلوم لسوء فهم سؤالك، والمادة هنا على CodeProject . بما أنك ذكرت أحجام مختلفة للحدود وغيرها، قد ترغب في النظر في مقاييس النظام الذي يتحكم في أحجام الحدود باستخدام GetSystemMetrics pinvokes، إلقاء نظرة على هنا لشيء من هذا القبيل، و هنا . انظر هنا أيضا في pinvoke.net موقع عن GetSystemMetrics.

ويساعد هذا الأمل، تحياتي الحارة، توم.

ولمن يتعثر على هذه المشكلة أيضا، فإن الحل الأفضل الناس الطيبين هنا يمكن أن تجد كان لاستخدام شيء على غرار:

Dim clientRectDelta As Integer = Me.Height - Me.ClientRectangle.Height - (SystemInformation.Border3DSize.Height * 2)
Dim actualMinimumHeight As Integer = Me.MinimumSize.Height - clientRectDelta
Dim deltaHeight As Integer = Me.ClientRectangle.Height - actualMinimumHeight

ولكن، هذا يتجاهل أي ارتفاعات تعتمد السيطرة محدد موضوع (أي ارتفاع رؤوس الأعمدة في تغيير listviews، الذي يبدو لتغيير الارتفاع الكلي يكون ListView، الذي يمكن أن يسبب التداخل الخ) - ولكن يبدو أن نعمل في الغالب <. / P>

وشكرا جزيلا لPondidum، tommieb75 وnobugz الذي ساعد مع هذه المشكلة! (آسف للجميع ولكن أنا لا أميل لديها حاليا ما يكفي من سمعة للاحتفال كل إجاباتك حتى +1).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top