سؤال

وأنا أحاول أن إنشاء coloumns من نص لC # التطبيق التي سيتم تشغيلها على MSN رسول. أواجه trouple الحصول على كل شيء ليصطف.

وهنا مثال على الإخراج الذي أريد:

1)  Pizza Hut                                            123 Fake St.
2)  Domino's Pizza                                       123 Fake St.
3)  The Cheesecake Cafe                                  123 Fake St.
4)  Capital Pizza & Steakhouse                           123 Fake St.
5)  Funky Pickle Pizza                                   123 Fake St.
6)  Boston Pizza                                         123 Fake St.
7)  Rose Bowl Rouge Lounge                               123 Fake St.
8)  Royal Pizza                                          123 Fake St.
9)  A Columbus Pizza & Donair Inc                        123 Fake St.

ولكن لأنه هو خط العرض المتغير فإنه يتم عرض مثل هذا:

1)  Pizza Hut                                        123 Fake St.
2)  Domino's Pizza                                   123 Fake St.
3)  The Cheesecake Cafe                                  123 Fake St.
4)  Capital Pizza & Steakhouse                               123 Fake St.
5)  Funky Pickle Pizza                                   123 Fake St.
6)  Boston Pizza                                     123 Fake St.
7)  Rose Bowl Rouge Lounge                               123 Fake St.
8)  Royal Pizza                                          123 Fake St.
9)  A Columbus Pizza & Donair Inc                    123 Fake St.

ولقد حاولت باستخدام C # string.PadRight () وظيفة، فضلا عن خلق وظيفة بلدي أن إضافة مسافات وعلامات الحشو باستخدام. كلا تعمل بشكل جيد مع الخطوط عرض ثابت ولكن كسر مع الخطوط عرض متغير.

هل هناك أي طريقة لتحديد عرض سلسلة في خط معين؟

وأو هل لديها أي اقتراحات أخرى؟

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

المحلول

ومجرد استخدام TextRenderer الطبقة . أبسط الحالات:

Size size = TextRenderer.MeasureText("Hello world", someFont);

إذا لم يكن لديك الوصول إلى System.Windows.Fonts الرسومات. MeasureString بقايا أو كان لديك بعض القيود ولكن ينبغي أن تفعل العمل:

Bitmap bmp = new Bitmap(1,1);
Graphics graphics = Graphics.FromImage(bmp);
SizeF size = graphics.MeasureString("Hello world", someFont);

ولكن تكون على علم أنه إذا كان الخط في النص والمساحات يجب أن تكون هي نفسها سوف تكون هناك حالات حيث لا يمكنك محاذاة النص تماما. أنا لا أعرف ما هو قادر على عمله في هذه الحالة MSN رسول ولكن إلا إذا كان لديك حق الوصول إلى مجموعة فرعية على الأقل من HTML سوف لا يكون لديك الكمال الناتج.

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

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

نصائح أخرى

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

ويبدو أنك تحاول تقديم كل هذا في ASCII في حقل نص واحد. نعم؟ إذا كان هذا هو الحال، وهذا صعب جدا. يبدو أن لديك عدد محدد من علامات التبويب بعد كل واحد في الوقت الراهن، والتي من شأنها أن تكون هذه القضية. هل يمكن بدلا من ذلك القيام المساحات - التي أظن تقومون به مع padright (لم تكن مألوفة جدا مع أن وظيفة محددة)

والشيء الرئيسي، رغم ذلك، هو أنه مع ASCII النقي من هذا القبيل، كما هو موضح في خط عرض متغير، وأنك لن تحصل عليه ليصطف تماما في العمود الثاني. يمكنك الحصول عليه قريبا إذا كنت الدؤوب، ولكن هذا كل شيء - إذا كان لديك صف واحد مع الكثير من العاصمة W، وآخر مع الكثير من وأنا صغيرة، سيكون لديك خلافات عرض كبيرة بغض النظر عن ما تفعله. إذا كنت جعلها في GDI، وأفضل أسلوب هو العمل على جعل استدعاء واحد إلى DrawText لكل عمود. يمكنك جعل سلسلة واحدة كبيرة للخروج من كل عمود إذا كنت تريد، وندعو MeasureString على العمود الأول لتحديد مقدار المساحة التي تحتاج إلى نقل أكثر للعمود الثاني.

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

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

    private static Bitmap bitmap = new Bitmap( 1, 1 );
    private static Graphics graphics = null;

    public static Graphics GetGeneralGraphics()
    {
        if ( graphics == null )
            graphics = Graphics.FromImage( bitmap );
        return graphics;
    }

وربما كنت تريد أن تجعل تلك المتغيرات المحلية (التي تقوم التخلص السليم عند الانتهاء من) في سياق خدمات الويب.

وربما يجب عليك تهيئة كل شيء في HTML، ثم هل يمكن TABLE مجرد إخراج وTR / TD عناصر الأعمدة

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