PDA

View Full Version : مبتدی: تغيير رنگ زمينه و ديگر كامپوننتها هنگام لود شدن



csharpdoost
پنج شنبه 27 خرداد 1389, 00:48 صبح
دوستان سلام
در برنامه اي جعبه رنگي را تعريف كردم كه كاربر رنگ دلخواه خود را براي زمينه فرم و ديگر كامپوننتها انتخاب كنه . ولي وقتي برنامه بسته ميشه و دوباره لود ميشه رنگ انتخابي كاربر از بين رفته و رنگ اوليه خود را بارگذاري ميكند.
تو اينترنت هم جستجو كردم اما چيزي كه مشكلم رو حل كنه پيدا نكردم
با تشكر

ostovarit
پنج شنبه 27 خرداد 1389, 01:02 صبح
دوستان سلام
در برنامه اي جعبه رنگي را تعريف كردم كه كاربر رنگ دلخواه خود را براي زمينه فرم و ديگر كامپوننتها انتخاب كنه . ولي وقتي برنامه بسته ميشه و دوباره لود ميشه رنگ انتخابي كاربر از بين رفته و رنگ اوليه خود را بارگذاري ميكند.
تو اينترنت هم جستجو كردم اما چيزي كه مشكلم رو حل كنه پيدا نكردم
با تشكر

نام رنگ رو در یک فایل ذخیره کن در زمان لود شدن فرم اون رنگ رو به صحه ای که میخوای بده

oldboy
پنج شنبه 27 خرداد 1389, 01:11 صبح
وقتی برنامه در حال اجراست همه چی تو رم کامپیوتره و با بسته شدن برنامه همه ی این اطلاعات از بین میره.
باید تنظیمات رو در یه فایل ذخیره کنی.
با توجه به برنامت میتونی این اطلاعات رو به صورت متنی ذخیره کنی یا از یه پایگاه داده ی ساده مثل sqlite استفاده کنی یا...

ساده ترین روش:
System.IO.File.WriteAllText("bgcolor.col",color);

csharpdoost
پنج شنبه 27 خرداد 1389, 21:23 عصر
در مورد اين دستور
System.IO.File.WriteAllText("bgcolor.col",color);[/quote]

دوست عزيز ميشه بيشتر توضيح بديد اين چه دستوريه؟ و چطور ميشه ازش استفاده كرد؟
برنامه موقع استفاده error ميده .

oldboy
پنج شنبه 27 خرداد 1389, 23:34 عصر
این یه مثاله و تو باید عوضش کنی. "bgcolor.col" که نوشتم اسم یه فایلی متنیه که اطلاعات توش ذخیره میش. هر آدرسی رو میتونی به جای این وارد کنی. من اینجا به جای .txt از پسوند .col استفاده کردم تا با دوبار کلیک کردن روی فایل، فایل با notepad باز نشه و امکان اینکه اطلاعات ناخواسته تغییر کنه کمتر بشه.
color هم رشته ایه که تو فایل ذخیره می کنی. مثلا می تونی رنگ رو ذخیره کنی.

csharpdoost
جمعه 28 خرداد 1389, 14:53 عصر
دوست عزيز ميشه يه برنامه ساده برام بنويسي و اينو برام اعمال كني

csharpdoost
جمعه 28 خرداد 1389, 18:36 عصر
از استاديد محترم كسي نيست كمكم كنه؟

Peyman.Gh
جمعه 28 خرداد 1389, 19:07 عصر
private void Form1_Load(object sender, EventArgs e)
{
if(System.IO.File.Exists("C:\\Color.Txt")){
this.BackColor = System.Drawing.Color.FromArgb(int.Parse(System.IO. File.ReadAllText("C:\\Color.Txt")));
}
}
private void button1_Click(object sender, EventArgs e)
{

colorDialog1.ShowDialog();
this.BackColor = colorDialog1.Color;
System.IO.File.WriteAllText("C:\\Color.Txt", colorDialog1.Color.ToArgb().ToString());
}

موفق باشید.

csharpdoost
شنبه 29 خرداد 1389, 00:20 صبح
با تشكر از دوست عزيز Peyman.Gh
مشكلم حل شد اما در مورد فونتها ، به همين شيوه در فايلي مي نويسم اما هر كاري كردم نتونستم بخونمش اگه در اين مورد هم كمكم كنيد متشكر ميشم .

csharpdoost
شنبه 29 خرداد 1389, 15:19 عصر
سلام بر دوستان
من در خوندن فونتها از فايل متني و اعمال دوباره فونت به كامپوننت مورد نظر مشكل دارم ميشه كمكم كنيد .
با تشكر

oldboy
شنبه 29 خرداد 1389, 18:38 عصر
باید طوری در فایل ذخیره کنی تا بتونی بعدا بخونیش. مثلا رنگ رو که تو فایل نوشتی، یه فاصله بزار و بعد فونت رو بنویس. موقع خوندن با استفاده از تابع split اونا رو جدا کن.


string s = System.IO.File.ReadAllText("C:\\test.txt");
string[] r = s.Split(' ');
با این کار یه آرایه ی دو عضوی r درست میشه که یکی از عضو هاش رنگه و دیگری نام فونت.

Font f = new Font(r[1], 10);
10 اندازه ی فونته.

csharpdoost
شنبه 29 خرداد 1389, 19:02 عصر
با تشكر از دوست عزيز oldboy
فونتهايم جداي از رنگ مي باشند با كد زير فونتها را در فايل متني مينويسم :

(private void button3_Click(object sender, EventArgs e
}
(if (fontDialog1.ShowDialog() == DialogResult.OK
;label1.Font = fontDialog1.Font
;(()System.IO.File.WriteAllText("C:\\fontfolder\\font1.Txt", fontDialog1.Font.ToString
}

اما كدي كه انرا بخوانم نميدانم چه كدي است و اين كد هم جواب نميده:

(private void Form1_Load(object sender, EventArgs e
}
label1.Font = System.Drawing.Font.FromHdc(( System.IO.File.ReadAllText"C:\\fontfolder\\font1.Txt"))
}

به جاي متد FromHdc از متدهاي ديگر اين كلاس استفاده كردم اما هيچكدوم جواب نميده.

csharpdoost
شنبه 29 خرداد 1389, 20:43 عصر
دوستان چي شد؟
يكي لطف كنه يه جوابي به ما بده .
پيشاپيش كمال تشكر را دارم

mahdi87_gh
شنبه 29 خرداد 1389, 21:22 عصر
سلام دوست عزیز
از کدی مثل زیر برای نوشتن در یک فایل متنی استفاده کن

FileStream FS = new FileStream(pacth, FileMode.Create);
FS.Seek(0, 0);
StreamWriter sr = new StreamWriter(FS);
sr.AutoFlush = true;
try
{
sr.WriteLine("sometext");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
FS.Close();
}
و از کدی مانند زیر برای خواندن یک فایل متنی استفاده کن

if (File.Exists(pacth))
{

FileStream FS = new FileStream(pacth, FileMode.Open);
FS.Seek(0, 0);
StreamReader sr = new StreamReader(FS);
try
{
sometext= sr.ReadLine();
}

catch (EndOfStreamException)
{
FS.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
FS.Close();
}
}

csharpdoost
شنبه 29 خرداد 1389, 22:39 عصر
دوست عزيز با تشكر
فكر ميكنم سوالم را بد طرح كردم بهتره بگم رشته خوانده شده از فايل متني(يا همان مشخصات فونت) را چطور ميشه دوباره به فونت تبديل كرد؟

csharpdoost
شنبه 29 خرداد 1389, 23:47 عصر
دوستان سلامي مجدد
دوستان چي شد ؟ كسي ميتونه بهم كمك كنه؟ فكر نكنم براس شما مهندسين كار سختي باشه. لطفا كمكم كنيد .
باز هم متشكريم

oldboy
یک شنبه 30 خرداد 1389, 00:28 صبح
دوستان سلامي مجدد
دوستان چي شد ؟ كسي ميتونه بهم كمك كنه؟ فكر نكنم براس شما مهندسين كار سختي باشه. لطفا كمكم كنيد .
باز هم متشكريم
اینو امتحان کردی؟

Font f = new Font(System.IO.File.ReadAllText("C:\\fontfolder\\font1.Txt"), 10);

csharpdoost
یک شنبه 30 خرداد 1389, 00:51 صبح
اینو امتحان کردی؟

Font f = new Font(System.IO.File.ReadAllText("C:\\fontfolder\\font1.Txt"), 10);
دوست عزيز با تشكر از توجهتون
شما اينجا داريد سايز ثابت 10 را به فونت اعمال ميكنيد در حالي كه سايز فونت را كاربر مشخص ميكند و هميشه به همان سايزي كه تعيين ميكند ميخواهد ببيند.

mahdi87_gh
یک شنبه 30 خرداد 1389, 11:12 صبح
از کد زیر برای دخیره فونتت استفاده کن

FontDialog fnt = new FontDialog();
fnt.ShowDialog();
button1.Font = fnt.Font;

FileStream FS = new FileStream("font.txt", FileMode.Create);
FS.Seek(0, 0);
StreamWriter sr = new StreamWriter(FS);
sr.AutoFlush = true;
try
{
sr.WriteLine(fnt.Font.Name);
sr.WriteLine(fnt.Font.Bold);
sr.WriteLine(fnt.Font.SizeInPoints);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
FS.Close();
}

و از کد زیر برای خواندن و لود کردن آن:

FileStream FS = new FileStream("font.txt", FileMode.Open);
FS.Seek(0, 0);
StreamReader sr = new StreamReader(FS);
try
{
string name = sr.ReadLine();
bool bold = Convert.ToBoolean( sr.ReadLine());
double size = Convert.ToDouble(sr.ReadLine());
Font fnt;
if (bold) fnt = new Font(new FontFamily(name), (float)size, FontStyle.Bold);
else fnt = new Font(new FontFamily(name), (float)size);
button1.Font = fnt;
}

catch (EndOfStreamException)
{
FS.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
FS.Close();
}

oldboy
یک شنبه 30 خرداد 1389, 11:30 صبح
اونی که من نوشته بودم مثال بود.
شما فقط نام فونت رو خواسته بودی. همه چی رو که نمی شه اینجا گفت. اگه می خوای سایزش رو هم ذخیره کنی، روشی که mahdi87_gh گفته روش خوبیه.

csharpdoost
یک شنبه 30 خرداد 1389, 15:34 عصر
دوستان خيلي خيلي ممنون مشكلم حل شد .