PDA

View Full Version : سوال: کار نکردن عجیب تابع کار با فونت



forodo
پنج شنبه 31 اردیبهشت 1394, 17:24 عصر
سلام
نمی دونم چرا وارد تابع نمیشه.
اصلاً به خط پایین که می رسه دیگه به خط بعدی نمی ره:
c.Font = new System.Drawing.Font(fontFamilies[1], 13);
این هم کدا:
// ساخت یک شی از کلاس پرایویت فونت کالکشن
System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection();
// تعریف یک متغیر آرایه ای از نوع فونت فمیلی
FontFamily[] fontFamilies;

// اضافه کردن فونت های دلخواه
pfc.AddFontFile(@"Fonts\BKAMRAN_0.TTF");
pfc.AddFontFile(@"Fonts\BNAZANB_0.TTF");
pfc.AddFontFile(@"Fonts\BROYA.TTF");
// ریختن فونت ها داخل متغیر آرایه ای از نوع فونت فمیلی
fontFamilies = pfc.Families;

foreach (Control c in this.Controls)
{
c.Font = new System.Drawing.Font(fontFamilies[1], 13);
ChangeControls(c, 1);
}

private void ChangeControls(Control c, int FontIndex)
{
foreach (Control ct in c.Controls)
{
ct.Font = new System.Drawing.Font(fontFamilies[FontIndex], 13);
}
}
فقط خواهشاً کمک کنید که بدجوری فرمام رو هواست.
با تشکر

RmeXXXXXXXXX
پنج شنبه 31 اردیبهشت 1394, 22:53 عصر
این نحو صحیح نیست.! شما موقع طراحی فرمتون برای هیچ کدوم از کنترلهاتون فونت مشخص نکنین! اگر هم این کار رو کردین برید تو قسمت Properties کنترلها و توی قسمت فونت کلید Delete رو بفشارید تا به حالت پیش فرض (فونت فرم) برگرده! بعد فقط کافیه فونت فرم رو عوض کنین تا خودکار تمام کنترل ها هم فونتشون عوض بشه! دیگه نیازی به این همه کد نویسی هم نیست فقط یک خط کد. اگر هم میخواهید که تعدادی کنترل از فرم فونت متفاوتی داشته باشه اونارو داخل یک کانتینر (Panel یا GroupBox) قرار بدین بعد فونت کانتینر رو عوض کنین! همین

forodo
جمعه 01 خرداد 1394, 03:49 صبح
به خاطر این، این همه کدنوشتم چون با این کار حتی اگه کاربر فونت مورد نظر رو روی سیستمش نداشته باشه برای برنامه هیچ مشکلی بوجود نمیاد.
اگر فرم فونت رو عوض کنم فونت بعضی کنترلها مثل toolStrip عوض نمیشه و باید دستی به خود کنترل فونت بدم.

shahryari
جمعه 01 خرداد 1394, 08:03 صبح
به خاطر این، این همه کدنوشتم چون با این کار حتی اگه کاربر فونت مورد نظر رو روی سیستمش نداشته باشه برای برنامه هیچ مشکلی بوجود نمیاد.
اگر فرم فونت رو عوض کنم فونت بعضی کنترلها مثل toolStrip عوض نمیشه و باید دستی به خود کنترل فونت بدم.

دوست گرامی :
اگه مشکلتون وجود یا عدم وجود فونت موزد نظر شما در سیستم مشتری هست ، این راه حلش نیست...
پوشه دیباگ رو همینجوری تجویل مشتری نمیدی که ... بالاخره یه ستاپ میسازی.. فونت موردنظرتو با همون ستاپ تو سیستم مشتری نصب کن بره پی کارش دیگه چرا خودتو علاف میکنی... :چشمک:

forodo
جمعه 01 خرداد 1394, 12:34 عصر
دوست گرامی :
اگه مشکلتون وجود یا عدم وجود فونت موزد نظر شما در سیستم مشتری هست ، این راه حلش نیست...
پوشه دیباگ رو همینجوری تجویل مشتری نمیدی که ... بالاخره یه ستاپ میسازی.. فونت موردنظرتو با همون ستاپ تو سیستم مشتری نصب کن بره پی کارش دیگه چرا خودتو علاف میکنی... :چشمک:
چرا باید وقتی به یه مشکلی برمی خوریم بریم صورت مسئله رو پاک کنیم؟!
بالاخره یه مشکلی بوجود اومده و رفع اون یعنی پیدا کردن راه حل مشکل که یعنی اضافه شدن به معلومات.
پیشنهاد شما قابل قبول ولی چرا مشکل رو حل نکنیم؟!
بعضی مواقع علاف شدن چند دقیقه ای باعث جلو افتادن چند ساعتی کارهای آینده میشه. :چشمک:

RmeXXXXXXXXX
جمعه 01 خرداد 1394, 15:26 عصر
آقایون ناراحتی نداریم... پیشنهاد دادم و نحوه ی صحیح تر رو توضیح دادم.
وقتی مسیر از ریشه اشتباه باشه تصحیح شاخه ها هیچ چیز رو درست نمیکنه. (همون جریان خشت اول و ثریا ست)
اگه واقعاً دنبال جواب سوالتون هستیین کد برنامه رو بذارین تا باهم فکر کنیم و جوابش رو پیدا کنیم.
در هر حال من کد زیر رو نوشتم و جواب هم گرفتم (بصورت بازگشتی نوشتم) امیدوارم کمکتون کنه.

private void button1_Click(object sender, EventArgs e)
{
System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection();
FontFamily[] fontFamilies;

pfc.AddFontFile(@"C:\Windows\Fonts\BMahsa.ttf");
pfc.AddFontFile(@"C:\Windows\Fonts\BArash.ttf");
pfc.AddFontFile(@"C:\Windows\Fonts\NJ_SIAVAS.ttf");
fontFamilies = pfc.Families;

this.ChangeControlFonts(this, new Font(fontFamilies[1], 13));

}
[System.Runtime.CompilerServices.MethodImpl(System. Runtime.CompilerServices.MethodImplOptions.Aggress iveInlining)]
private void ChangeControlFonts(Control c, Font font)
{
if(c == null) return;
c.Font = font;
foreach(Control cChild in c.Controls)
this.ChangeControlFonts(cChild, font);
}

RmeXXXXXXXXX
جمعه 01 خرداد 1394, 15:29 عصر
این خط رو هم نوشتم تا به کامپایلر بگم تابع رو اگه میتونه بصورت inline اجرا کنه تا سرعت برنامه کم نشه
[System.Runtime.CompilerServices.MethodImpl(System. Runtime.CompilerServices.MethodImplOptions.Aggress iveInlining)]

forodo
جمعه 01 خرداد 1394, 16:11 عصر
این کد (http://barnamenevis.org/showthread.php?468599-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%81%D9%88%D9%86%D8%AA-%D8%AF%D9%84%D8%AE%D9%88%D8%A7%D9%87%D8%8C-%D8%A8%D8%AF%D9%88%D9%86-%D8%A7%DB%8C%D9%86%DA%A9%D9%87-%D8%AD%D8%AA%DB%8C-%D9%81%D9%88%D9%86%D8%AA-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%B8%D8%B1%D8%8C-%D8%AF%D8%B1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%A7%D8%B4%D8%AA%D9%87-%D8%A8%D8%A7%D8%B4%D8%AF&p=2099495&viewfull=1#post2099495) رو خودم گذاشتم که اگر داخل کد رو دقت کنید توی خط new Font ... قبلش هیچ کلاسی ( System.Drawing ) رو قرار ندادم ولی توی برنامه دیگه ای می خوام استفاده کنم از Font ایراد می گیره که حدس می زنم به خاطر این باشه ولی نمی دونم چیکارش باید بکنم.
اگه فونت رو پیدا نکنه کلاً ارور می ده پس مسیر آدرس دهی فونتها درسته.
گذاشتن کل برنامه در اینجا هم برام مقدور نیست.
توی عکس اگه نگاه کنید اصلاً Font قرمزه که جلوش می گه مال کدوم رو می خواید استفاده کنید که از Drawing یا dll مربوط به Word هستش.
131509

RmeXXXXXXXXX
شنبه 02 خرداد 1394, 00:08 صبح
دوست عزیز پیام خطا رو اگه نشون میدادین همون اول بهتون میگفتم مشکل کجاست.
شما دوتا فضای نام دارین که دارای کلاس یکسانی به نام Font می باشندک
System.Drawing فضای نام برای کلاس فونت دانت
Microsoft.Office.Interop.Word کلاس فونت آفیس
برای رفع مشکل هرجا که خواستین فونتی بسازید نام فضای نامش رو هم بنویسین. بدین صورت:

ct.Font = new System.Drawing.Font(fontFamilies[FontIndex],13);

forodo
شنبه 02 خرداد 1394, 08:29 صبح
خوب مشکل همینه دیگه.
با این که فضای نامش رو گذاشتم به این خط که میرسه به خط بعدی نمی ره.
نمی دونم کجای کار مشکل داره؟
کدهارو توی پست اول گذاشتم. نمی دونم اگر چیزه دیگه ای باید باشه تا متوجه باشید بگید تا بذارم.