سلام دوستان
من الان یه مشکلی با سیو اطلاعات فرم دارم
نمیتونم زبان برنامه رو سیو کنم ؟
یه سمپل گذاشتم ببنید چشه
ممنون
یا حق
کد:http://s45.eu.rapidbaz.com/get/_I.lo/save.rar
Printable View
سلام دوستان
من الان یه مشکلی با سیو اطلاعات فرم دارم
نمیتونم زبان برنامه رو سیو کنم ؟
یه سمپل گذاشتم ببنید چشه
ممنون
یا حق
کد:http://s45.eu.rapidbaz.com/get/_I.lo/save.rar
سلام
پیشنهاد میکنم از دستورات قدیمی VB6 استفاده نکنید و سعی کنید کلاً فراموششان کنید.
فرمان منویی زیر را پیگیری کنید:
Project->Properties->Settings
حال یک تنظیم جدید مثلاً با نام Language و نوع String اضافه کنید و پنجره را ببندید.
حالا میتوانید با دستور My.Settings.Language مقدار این تنظیم را بخوانید و یا بنویسید.
... = My.Settings.Language
My.Settings.Language = ...
با دستور My.Settings.Save هم متوانید Save اجباری انجام دهید و با My.Settings.Reload لود اجباری که البته معمولاً نیاز نمیشود.
موفق باشید.
سلام اچی جان
ممنون بابت پاسخ
اما از این دستور چه طور میشه برای زبان استفاده کرد
همون طور که میدونید فرم پرپرتی به نام زبان نداره ولی اگه داشت می شد اینو براش نوشت مثلا :
My.Settings.BColor = Me.BackColor
Me.BackColor = My.Settings.BColor
ولی فرم که چینین چیزی نداره
ممنون میشم راهنمایی کنید و یا اگه وقت دارید اون سمپل منو کامل کنید
ممنون
سلام
همیشه معیار مناسب و نظیری برای ذخیره با ساختارهای استاندارد میتوان پیدا کرد.نقل قول:
اما از این دستور چه طور میشه برای زبان استفاده کرد
خود شما در کد قبلیتان چه کرده بودید؟ آیا کل شی System.Globalization.CultureInfo را ذخیره کرده بودید؟
خود ما دو string خاص با مقدارد "Persian" و "English" را ذخیره کرده بودید.
اما راه کاملتر و بهتر هم وجود دارد چرا "fa-IR" و یا "en-US" را ذخیره نمیکنید؟ در زمان نوشتن و خواندن هم نیاز به iF و یا Select Case ندارید، ضمن آنکه اگر تعداد زبان ها هم بیشتر شود کنتر ساده تری خواهید داشت.
و بهتر از مقدار Name مقدار عددی lcid است
مثلاً lcid زبان فارسی 1065 است و lcid زبان انگلیسی 1033 است.
کد:'Save ...
Dim culture As New System.Globalization.CultureInfo("fa-IR")
'Or
Dim culture As New System.Globalization.CultureInfo(1033)
System.Threading.Thread.CurrentThread.CurrentCulture = culture
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
My.Settings.Int32Language = culture.LCID
My.Settings.Save()
'Load ...
Dim lcid As Integer = My.Settings.Int32Language
If (lcid > 0 )
Dim culture As New System.Globalization.CultureInfo(lcid)
System.Threading.Thread.CurrentThread.CurrentCulture = culture
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
End If
قضاوت با خودتون اچی جان
کد:http://www.up.ma/images/jwdlsg632s80i2n54hd.png
سلام
اتفاقاً نام لغت قبلی Language را مخصوصاً Int32Language گذاشتم (وگرنه نام که مهم نیست) تا متوجه شوید آیتمی را که در بخش Settings میسازید دیگر نباید از نوع String باشد بلکه در کامپو مربوطه باید نوعش را Int32 یا Integer قرار دهید.نقل قول:
قضاوت با خودتون اچی جان
چون فکر کردم متوجه میشود دیگر تاکیدی نکردم.
موفق باشید.
شرمنده اصلا هواسم نبود
خیلی ممنون
اچی جان اینو ببین
برای هی فرمی سیو میشه اما فرم اصلی تغیر نمیکنه
ممنون اگه حلش کنی
یا حق
کد:http://www.up.ma/images/hqspmd0e6sw8xnebl46g.rar
دوستان یه کمکی بفرمائید
والا ما گیر اینیم:40::11:
سلام
دلیلش مشخص است شما بارگذاری تنظیم را در form_load انجام داده اید، جایی که برای خود فرم اصلی بارگذاری اتمام شده و کار از کار گذشته!نقل قول:
اچی جان اینو ببین
برای هی فرمی سیو میشه اما فرم اصلی تغیر نمیکنه
ممنون اگه حلش کنی
شما باید روال loaddd را قبل از بارگذاری فرم اولیه اجرا کنید.
مثلاً در sub main یا sub new
مثلاً form_load را حذف کنید و کد زیر را اضافه کنید:
(البته sub main منطقی تر است ولی کد زیر هم کار میکند.)
=====کد:Public Sub New()
Me.loaddd()
Me.InitializeComponent()
End Sub
ضمناً دستوراتی شبیه about.show و یا other.show صحیح نیستند و مغایرت اساسی با موازین oop دارند و صرفاً برای هماهنگی و آپگراید راحت تر کدها از vb6 قرار داده شده اند.
از دستورات زیر استفاده کنید:
=====کد:Dim x As New other
x.show()
موفق باشید.
اچی جان من با این کد شما مشکل دارم راه بهتری نیست ؟
مثلا لود اطلاعات در اسپلش ؟
سلام
نباید به مشکلی بربخورید!!!
از sub main استفاده کنید.
راه قطعی و بهترین راه.
و البته با تنظیم زیر:کد:<STAThread()> Public Shared Sub Main()
Dim lcid As Integer = My.Settings.Int32Language
If (lcid > 0) Then
Dim culture As New System.Globalization.CultureInfo(lcid)
System.Threading.Thread.CurrentThread.CurrentCulture = culture
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
End If
System.Windows.Forms.Application.EnableVisualStyles()
System.Windows.Forms.Application.Run(New Form1)
End Sub
Project->Properties->Application
آیتم Enabled Appilication framework را از انتخاب خارج کنید و از کامبو Startup گزینه Sub Main را انتخاب کنید.
سلام اچی جان
بله قبول دارم راه قطعی هست اما این طور ما فرام ورک رو از برنامه میگیریم درسته ؟
یعنی استایل و ستینگ و .... اسپلش
که این اصلا به درد نمیخوره
شما راهی بهتر سراغ نداری ؟
سلام
بجز مورد splash بقیه موارد که ذکر کردید اشتباه هستند.نقل قول:
بله قبول دارم راه قطعی هست اما این طور ما فرام ورک رو از برنامه میگیریم درسته ؟
یعنی استایل و ستینگ و .... اسپلش
که این اصلا به درد نمیخوره
اگر توانستید framework را از vb.net و c#.net بگیرید، خبرم کنید!
در واقع این Enabled Appilication framework اصلاً ارزشی ندارد!
اصلاً C#.Net و Vc++.Net آنرا برای برنامه نویسانشان ندارند، همه برنامه های C#.Net و VC++.Net مستقیماً با subMain شروع میشوند.
من شخصاً استفاده از sub main را به vb کارها هم توسیه میکنم.
برای splash هم به سادگی میتوانید آنرا قبل از فرم اصلی و به مدت مشخصی نمایش دهید، همش 4 یا 5 خط کد میشود.
اچی جان یعنی راهی نداره به جز این ؟:41:
ایا نمیشه اطلاعات رو در اسپلش که قبلا از فرم هست لود کرد
سلام
من واقعاً ناراحتی و مشکل شما درک و احساس نمیکنم!!!!؟؟؟؟نقل قول:
اچی جان یعنی راهی نداره به جز این ؟
شما به راحتی میتوانید کد را در sub main یا sub new قرار دهید و هیچ کدام مشکل و عیبی ندارند!!!
اگر هر یک ایرادی دارند، خوشحال میشوم من هم بدانم.
بله باید بشود، تست کنید.نقل قول:
ایا نمیشه اطلاعات رو در اسپلش که قبلا از فرم هست لود کرد
در قبل از load هر فرمی دستور شما اجرا شود، فرم هایی که بعد از ان load خواهند شد متاثر خواهند شد.
حال این کد میتوانید هر کجا اجرا شود.
(
البته این تا حدودی روش منطقی و خوبی هم است.
یعنی در یک برنامه کامل، معمولاً از sub main استفاده میشود و فرم splash نشان داده شده و اعمال بارگذاری آغاز میشود.
)
=====
بهرحال شما میتوانید از هر کدی که سلاح میدانید و مناسب میبینید استفاده کنید.
مشکی داشتید همچنان درخدمت هستم
موفق باشید.
سلام اچی جون
همین که جواب ما فقیر فقرا رو میدی دمت گرم
ببین من یه فرم درست کردم با اسم اسپلش و اون رو لود قرار دادم
بعد در یک تایمر با اینترنئال 1 کد زبان رو نوشتم و در یک تایمر دیگه با اینتروال 100 کد مخفی کردن فرم و نمایش فرم 1
ولی بازم کار نمیکنه ؟
مشکل چیه ؟
سلام
اگر کد را بگذارید شاید بتوانم ایرادش را پیدا کنم ولی الآن تئوری ندارم!نقل قول:
ولی بازم کار نمیکنه ؟
مشکل چیه ؟
=====
ولی من برای خودم معمولاً از چیزی شبیه این استفاده میکنم.
تا تمام بارگذاری را انجام دهم.
حلقه while اخر هم تضمین میکند که اگر فرآیند بارگذاری کمتر از 3 ثانیه طول کشیده باشد، حتماً فرم Splach سه ثانیه نمایش داده شده باشد.
(البته خود من به شخصه اصلاً از این کار خوشم نمی آید و هیچگاه صبر اجباری را تحمیل نمیکنم)
کد:
<STAThread()> Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()
Using f As New frmSplashScreen
f.Show()
Dim mindate As Date = Date.UtcNow.AddSeconds(3)
'Loading... (reading settings)
'f.Report("...")
'Loading... (connecting to database)
'f.Report("...")
'Loading... (scaning plugings)
'f.Report("...")
'f.Visible = False
'Loading... (security authenticate)
'f.Visible = True
'Loading... (security authorize)
'f.Report("...")
'Loading... (main form with Visible=False for Application.Run)
Do While (Date.UtcNow < mindate)
System.Threading.Thread.Sleep(100)
System.Windows.Forms.Application.DoEvents()
Loop
End Using
System.Windows.Forms.Application.Run(New frmMdiMain)
End Sub
بفرما اچی جان
کد:http://www.up.ma/images/ptr33ejjk7a8ojaodfo.rar
سلام
درست است، حق با شما است.نقل قول:
ببین من یه فرم درست کردم با اسم اسپلش و اون رو لود قرار دادم
بعد در یک تایمر با اینترنئال 1 کد زبان رو نوشتم و در یک تایمر دیگه با اینتروال 100 کد مخفی کردن فرم و نمایش فرم 1
ولی بازم کار نمیکنه ؟
مشکل چیه ؟
من چون از امکانات غیر sub main استفاده نکرده بودم، اطلاع نداشتم.
وقتی در خود تنظیمات vb فرم splash را معین میکنید، روند کار اینطور نیست که صبر کند تا splash کامل بسته شود و سپس فرم اصلی را بارگذاری کند (که البته صحیح است) و این مسئله باعث میشود کد داخل splash عملاً بعد از بارگذاری فرم اصلی فراخانی شود.
متاسفم، همان sub main را به شما پیشنهاد میکنم با کد مشخص زیر برای برنامه ای که فرستاده بودید.
- پروزه را برایتان اصلاح نکردم، چون من با 2008 کار میکنم و با اصلاح من، پروژه را در 2005 شما باز نمیشود.کد:<STAThread()> Public Shared Sub Main()
System.Windows.Forms.Application.EnableVisualStyles()
Dim fmain As Form1
Using f As New splash
f.Show()
Dim mindate As Date = Date.UtcNow.AddSeconds(3)
Dim lcid As Integer = My.Settings.Int32Language
If (lcid > 0) Then
Dim culture As New System.Globalization.CultureInfo(lcid)
System.Threading.Thread.CurrentThread.CurrentCulture = culture
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
End If
fmain = New Form1()
Do While (Date.UtcNow < mindate)
System.Threading.Thread.Sleep(100)
System.Windows.Forms.Application.DoEvents()
Loop
End Using
System.Windows.Forms.Application.Run(fmain)
End Sub
- مقدار عدد 3 را میتوانید بسته به دلخواه خود برای نمایش اجباری splash تنظیم کنید.
- البته Int32Language کد قبلیتان هم برروی String تنظیم شده که باید Integer اش کنید.
- شما کد فوق را با تنظیم زیر استفاده کنید، مطمئن باشید مشکلی برای حال و آینده نخواهد داشت، چون اگر مشکلی میداشت پیش از شما برنامه نویسان دیگر زبانهای دات نتی آن را درک میکردند.
[QUOTE=_H2_ته با تنظیم زیر:
Project->Properties->Application
آیتم Enabled Appilication framework را از انتخاب خارج کنید و از کامبو Startup گزینه Sub Main را انتخاب کنید.
[/QUOTE]
موفق باشید.
خیلی ممنون اچی جان
چشم ما هم مطیع اوامر شمائیم
موفق باشی ( بیشتر )
یا حق
سلام اچی جان
یه مشکلی هست بعد از استفاده از این کد تکست ها رد برنامه وقتی رو انگلیسی هست به اون حالت تکس رندر ( text render ) میره چیش کنم ؟
سلام
درست متوجه نشدم.نقل قول:
یه مشکلی هست بعد از استفاده از این کد تکست ها رد برنامه وقتی رو انگلیسی هست به اون حالت تکس رندر ( text render ) میره چیش کنم ؟
مشکلتان با چپ چین و راست چین در TextBox ها و Label ها است؟
سلام
نه اچی جان
برو رو یه لیبل کلیک کن و در قسمت پرو پرتیس دنبال یه چیزی تو این مایه ها بگرد
text render در اون اخر ها هست
ببین لیبل چه شکلی میشه !
الان برا من تمام فرم و کنترل ها این طور شدن
چه طور درستش کنم؟
ممنون:11:
سلام
متاسفام واقعاً میخواهم کمک کنم ولی مشکلی ندیدم.:11:
منظورتان UseCompatibleTextRendering است؟
خوب به راحتی True و False میشود و تنظیم هم سرجایش میماند! (تغییری نمیکند)
اگر میخواهید مقدار پیشفرضی را برای UseCompatibleTextRendering مشخص کنید، میتوانید در Sub Main کد زیر را اضافه کنید:
(System.Windows.Forms.Application.SetCompatibleTex tRenderingDefault(False/True
اگر ایراد تابلو و مشخص است، یک تصویر بگذارید شاید متوجه شوم!:11:
=====
یک مشکل دیگر هم گاهاً در برنامه های چند زبانه این تیپی پیش می آید مشکل چپ چین و راست چین Label ها است که به علت ابعاد مختلف متن در زبانهای مختلف Label های زیر هم را از تراز با هم خارج میکند.
در این حالت میتوانید AutoSize را غیر فعال کنید و سایز Label را دستی به سایز بزرگتر و مناسبی ست کنید.
=====
موفق باشید.
سلام اچی
با کد شما مشکل حل شد
اما برای بیان منظورم دو عکس اماده کردم که مطلب را شما به درستی درک کنید :
سپاسگدارم
موفق باشی
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]