نحوه استفاده از Theme در C#

tina.programer

عضو جدید
سلام من امروز اومدم اینجا :D

نمی دونم اینجا هم مثل برنامه نویس سوالا رو بی پاسخ میزارن یا پاسخ میدن زودی :smile:

من یه نمونه سورس پیدا کردم که با انتخاب هر کدام از قالب ها فرم همون شکل میشه 30 تا قالب داره ما من می خوام دقیقاً همین امکان رو توی تمام فرم هام داشته باشم تا کاربر خودش انتخاب کنه و فرم رو به شکلی که می خواد دربیاره اما بعد از اینکه انتخاب دیگه قالبش بمونه و اینطوری نباشه که بعد از بستن پروژه قالب هم برگرده به حالت اولیه می خوام برای مراجعات بعدی نگه داره

یا اینکه یه تنظیم کنم کاربر بتونه تمام فرم ها رو اینطوری تم بزاره و بتونه تغییر بده چطوری اینکار رو بکنم ؟ :(:(

اینم نمونه سورس : http://753954.20upload.net/files/1389/bahman/Change.zip
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
سلام من امروز اومدم اینجا :D

نمی دونم اینجا هم مثل برنامه نویس سوالا رو بی پاسخ میزارن یا پاسخ میدن زودی :smile:

من یه نمونه سورس پیدا کردم که با انتخاب هر کدام از قالب ها فرم همون شکل میشه 30 تا قالب داره ما من می خوام دقیقاً همین امکان رو توی تمام فرم هام داشته باشم تا کاربر خودش انتخاب کنه و فرم رو به شکلی که می خواد دربیاره اما بعد از اینکه انتخاب دیگه قالبش بمونه و اینطوری نباشه که بعد از بستن پروژه قالب هم برگرده به حالت اولیه می خوام برای مراجعات بعدی نگه داره

یا اینکه یه تنظیم کنم کاربر بتونه تمام فرم ها رو اینطوری تم بزاره و بتونه تغییر بده چطوری اینکار رو بکنم ؟ :(:(

اینم نمونه سورس : http://753954.20upload.net/files/1389/bahman/Change.zip

دوست عزيز، معمولاً در این پروژه ها یک DefaultLookAndFeel ای وجود دارد که عنوان تم رو نگهداری میکنه و بقیه فرم ها هم از همون استفاده می کنند یعنی به صورت پيش فرض، با ورود به فرم اصلی تمامی فرم ها تغيير می کند. در مورد نگهداری آن هم باید بگم که براساس کاربر وارد شده می توان تم انتخابی رو در بانک ذخيره کرد (در جدول کاربر) و با ورود کاربر، آن را لود نمود.
 

MojtabaDinarvand

عضو جدید
با سلام.

البته این کارو اکثرا تو ستینگ برنامه انجام میدن چون کار غیر اصولی هست که یک مقدار تو یک بانکی بذاری که هر بار هم باید اونو فراخوانی بکنی.

موفق باشید.
 

tina.programer

عضو جدید
با سلام.

البته این کارو اکثرا تو ستینگ برنامه انجام میدن چون کار غیر اصولی هست که یک مقدار تو یک بانکی بذاری که هر بار هم باید اونو فراخوانی بکنی.

موفق باشید.

بهترین انتخاب ، میشه شما یه نمونه بنویسید و اینجا قرار بدید ؟
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
در پست دوم من گفتم (البته در مورد کامپوننت های DevEXpress) که باید چه کنید :gol:
مطمئناً کمی سرچ کنید به نتيجه میرسید.
 

RIG

متخصص C#.net
من اسکین رو ذخیره نکردم مقداری به نوع string رو ؛ روش اعمل های زیر رو انجام دادم تا نحوه ذخبره تو بانک رو ببینی .
ببین من تو بانک مقداری رو ذخیره میکنم و سپس لودش میکنم . (اول میسازم بعد set میکنم و اخرش هم لود میکنم) . اگه درست توجه کنی متوجه میشی .
در ضمن سوالی داشتی بپرس و اینکه به گفته Mojtaba Dinarvand کار زیاد مناسبی نیست. مخصوصا regitry .
فقط این کار رو کردم تا با نحوه اچراش اشنا بشی و گرنه توصیه استفاده رو تو برنامت رو نمیدم.
کد:
using System;
using System.Windows.Forms;
//---------------------
using Microsoft.Win32;
//---------------------

namespace Setvalue_then_GetValue_With_Registry
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "A")
            {
                using (RegistryKey reg = Registry.LocalMachine.OpenSubKey("SAM", true))
                {
                    
                    reg.CreateSubKey("RIG");
                    reg.SetValue("RIG",comboBox1.Text,RegistryValueKind.String);
                    reg.Close();
                }
               


            }
            else if (comboBox1.Text == "B")
            {
                using (RegistryKey reg = Registry.LocalMachine.OpenSubKey("SAM", true))
                {

                    reg.CreateSubKey("RIG");
                    reg.SetValue("RIG",comboBox1.Text,RegistryValueKind.String);
                    reg.Close();
                }
            }
            else if (comboBox1.Text=="C")
            {
                using (RegistryKey reg = Registry.LocalMachine.OpenSubKey("SAM", true))
                {

                    reg.CreateSubKey("RIG");
                    reg.SetValue("RIG",comboBox1.Text, RegistryValueKind.String);
                    reg.Close();
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //load
            using (RegistryKey reg = Registry.LocalMachine.OpenSubKey("SAM", true))
            {

                textBox1.Text = reg.GetValue("RIG").ToString();

                reg.Close();


                if (textBox1.Text != null)
                {
                    label1.Text = "ACCEPT...";

                }
                else
                {
                    MessageBox.Show("Error...");
                }

            }

        }
    }
{
 
آخرین ویرایش:

tina.programer

عضو جدید
می خواستم دلیل اینکار رو بدونم که چرا استفاده نکنم ؟

و اینکه این رو کل فرم ها تم رو اعمال میکنه ؟ می تونم دقیقاً از این کد استفاده کنم ؟
 

RIG

متخصص C#.net
می خواستم دلیل اینکار رو بدونم که چرا استفاده نکنم ؟

و اینکه این رو کل فرم ها تم رو اعمال میکنه ؟ می تونم دقیقاً از این کد استفاده کنم ؟
ببین بانک من اینجا رجیستری هستش و اینکه من با opensubkey مسیر sam رو باز میکنم و بعدش یه زیر شاخه می سازم. و این موارد هیچ مشکلی ندارند و مشکلی هم به وجود نمیاد .
اما دسترسی به رجیستری هم موارد خاص خودش رو داره و ....
در ضمن اگه بخای بانکی رو ازش استفاده کنی database بهترین گزینه هستش چون امنیت اطلاعاتت مهمه . رجیستری بیشتر برای کار با موارد رجیستری انجام میشه نه که بخای یه مقداری رو یه صورت استرینگ بگیری بعدش تو رجیستری ثبت و بعدش بخونیش.
به هر حال رجیستری زیاد محل مناسب این کار ها نیست.
(در ضمن اگه تا الان منظورتو بد متوجه نشده باشم و دارم دقیقا تو مسیر سوالت پبش میرم .اگه فکر میکنی که سوال به نحوی پاسخ داده میشه بگو تا بتونیم بیشتر جلو بریم . ممنون )
 

tina.programer

عضو جدید
خیلی ممنون RIG

من کل خواستم اینه که می خوام یه بخش توی برنامم داشته باشم به که کاربر بتونه تم فرم ها رو عوض کنه

تو همین تاپیک نحوه استفاده تکی از تم ها رو گذاشتم و همچنین نمونه سورس که با استفاده از کامبوباکس می تونیم انتخاب کنیم و تم فرم عوض بشه اما من می خوام

کاربر از تنظیمات این کار رو بکنه و اینکه دیگه تم شماره مثلاً 11 رو انتخاب کرد تمام فرم ها به همون تم انتخابی ست بشن و وقتی کاربر برنامه رو می بنده و دوباره باز می کنه همون تمی که انتخاب کرده باقی بمونه

کل خواستم اینه خیلی خیلی ممنون میشم اگه کسی کد کامل اینو برام بنویسه


 
  • Like
واکنش ها: RIG

RIG

متخصص C#.net
نمونه . تو خوده برنامه مشخص هست چسکار کنی البته یه توضیح کوچولو هم دادم .
همون IrisSkin2.dll رو استفاده کردم که خودت گذاشتی . بیین اگه regedt32 یا همون regedit رو تو run تایپ کنی . و اون مسیر رو بری میبینی که همچین فایلی ساخته شده . اما ویندوز ها متفاوت هستش من دقیقا نمیدونم که رجیستری بقیه ویندوز ها هم همین شکلی هست یا نه چون تا حاا بش دقت نکردم .
اما اگه از access و .. استفاده میشد کار بهتری بود.
این نمونه فقط بخاطر اینه که بدونی چیکار کنی.
 

پیوست ها

  • reg.zip
    319.1 کیلوبایت · بازدیدها: 0

RIG

متخصص C#.net
سلام اینو با بانک اطلاعاتی access نوشتم همه چی داره اما قسمت مربوطه قسمتی هستش که خانم tinaprogramer واسه اضافه کردن و تو بانک و بعد لود کردنش و ...
مربوط به همین اسکین .
رمز هم 1234
و توقسمت Setting demo این مورد رو میتونی ببینی .
موفق باشی:gol:
 

پیوست ها

  • DataBase2010.zip
    402.1 کیلوبایت · بازدیدها: 0

tina.programer

عضو جدید
خیلییییییییییییی ممنون ولی rig آخه این تغییر میده
بعد وقتی از برنامه خارج میشم و دوباره می خوام وارد شم اون تمی که ست کرده بودم نیست و بر میگرده به حالت اولیه
 
  • Like
واکنش ها: RIG

RIG

متخصص C#.net
ببین اون کدی که تو read نوشتم رو باید تو from_load بنویسی . وقتی فرم لود شه تغییرات اعمال میشه و لی اینجا که من نوشتم باید روی دکمه read کلیک کنی. اوکی؟
 

tina.programer

عضو جدید
من این کدها رو با sql نوشتم اما ایراد داره

البته ارور نمیده ولی خوب برنامه درست کار نمی کنه و اونکاری که برنامه شما می کنه رو نمی کنه

توی save نوشتم :

قبلش کانکشن :

کد:
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\esdddd.mdf;integrated security=true;User Instance=True");
        SqlDataAdapter da = new SqlDataAdapter("", con);

کد:
try
            {
                SqlCommand cmd = new SqlCommand(); // baraye add kardan az db , table dar yek combobox
                cmd.Connection = con;
                                con.Open();
                                String up = "update settingTable Set Demo='" + comboBox2.Text + "' ";
                                cmd.CommandText = up;
                          
                               cmd.CommandType = CommandType.Text;
                                cmd.Parameters.AddWithValue("@Demo", comboBox2.Text);
                             
                
                con.Close();
                //show1();
                MessageBox.Show("Successfully Saved.");
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message);
            }

بعد روی combobox2 کلیک کردم و نوشتم :

کد:
this.skinEngine1.SkinFile = Environment.CurrentDirectory + @"\Skin\" + comboBox2.Text + ".ssk";
            this.skinEngine1.Active = true;


البته .skinEngine1 و کامپوننت و همه چی رو انجام دادم قبلش

توی دکمه read هم نوشتم :

کد:
SqlCommand cmd = new SqlCommand(); // baraye add kardan az db , table dar yek combobox
            cmd.Connection = con;
            SqlDataReader dr;
            con.Open();
            cmd.CommandText = "select * from settingTable";
            dr = cmd.ExecuteReader();
            while (dr.Read() == true)
            {
                comboBox1.Items.Add(dr["demo"]);
                textBox2.Text = Convert.ToString(dr["demo"]);
                this.skinEngine1.SkinFile = Environment.CurrentDirectory + @"\Skin\" + textBox2.Text + ".ssk";
                this.skinEngine1.Active = true;
            }
            con.Close();
        }

فقط اینجا نمی دونم چرا comboBox1 رو استفاده کردم از همون 2 هم می تونستیم استفاده کنیم .

اما برنامه من فقط وقتی از combobox2 انتخاب می کنم تم رو عوض می کنه و save هم مسیج میده که با موفقیت بوده اما read که می زنم عمل نمی کنه یا بهتر بگم توی فرم لود که میزارم کد resd رو عمل نمی کنه

کاش این برنامه ای که قرار دادید با پایگاه داده sql بود خیلی خیلی خیلی کمکم می کرد :(:(:(:(:(:(:(:(:(
 
  • Like
واکنش ها: RIG

RIG

متخصص C#.net
فقط اینجا نمی دونم چرا comboBox1 رو استفاده کردم از همون 2 هم می تونستیم استفاده کنیم . یعنی چی ؟ مگه ما کومبو 1 هم اینجا داریم؟
2- SAVE MESSGE رو میده ایا فرم هم تغییر میکنه ؟ بعدش برو ببین مقدار جدولت تغییر (اپدیت شده) دو 3 باری اینکار کن تا چک کنی کامل .
3- اگه فرض کنیم که همه چی درست باشه مشکل اصلی اینکه مقدارت از جدول خونده نمیشه ؟ اگه هم خونده میشه مقداراولیه هستش .بازم باید مقدار جدولتو ببینی اگه مقدارش آخرین مفدار ثبت شده باشه تازه مشکل از کد نویسیه . تو تغییرات ثبت رو دنبال کن و بعد به میرم دنبال READ . اسم جدول و ... همه رو چک کن و ....
چون چیز دیگه ای به ذهنم نمیاد
 

RIG

متخصص C#.net
من این کدها رو با sql نوشتم اما ایراد داره

البته ارور نمیده ولی خوب برنامه درست کار نمی کنه و اونکاری که برنامه شما می کنه رو نمی کنه

توی save نوشتم :

قبلش کانکشن :

کد:
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\esdddd.mdf;integrated security=true;User Instance=True");
        SqlDataAdapter da = new SqlDataAdapter("", con);
کد:
try
            {
                SqlCommand cmd = new SqlCommand(); // baraye add kardan az db , table dar yek combobox
                cmd.Connection = con;
                                con.Open();
                                String up = "update settingTable Set Demo='" + comboBox2.Text + "' ";
                                cmd.CommandText = up;
                          
                               cmd.CommandType = CommandType.Text;
                                cmd.Parameters.AddWithValue("@Demo", comboBox2.Text);
                             
                
                con.Close();
                //show1();
                MessageBox.Show("Successfully Saved.");
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message);
            }
بعد روی combobox2 کلیک کردم و نوشتم :

کد:
this.skinEngine1.SkinFile = Environment.CurrentDirectory + @"\Skin\" + comboBox2.Text + ".ssk";
            this.skinEngine1.Active = true;
البته .skinEngine1 و کامپوننت و همه چی رو انجام دادم قبلش

توی دکمه read هم نوشتم :

کد:
SqlCommand cmd = new SqlCommand(); // baraye add kardan az db , table dar yek combobox
            cmd.Connection = con;
            SqlDataReader dr;
            con.Open();
            cmd.CommandText = "select * from settingTable";
            dr = cmd.ExecuteReader();
            while (dr.Read() == true)
            {
                comboBox1.Items.Add(dr["demo"]);
                textBox2.Text = Convert.ToString(dr["demo"]);
                this.skinEngine1.SkinFile = Environment.CurrentDirectory + @"\Skin\" + textBox2.Text + ".ssk";
                this.skinEngine1.Active = true;
            }
            con.Close();
        }
فقط اینجا نمی دونم چرا comboBox1 رو استفاده کردم از همون 2 هم می تونستیم استفاده کنیم .

اما برنامه من فقط وقتی از combobox2 انتخاب می کنم تم رو عوض می کنه و save هم مسیج میده که با موفقیت بوده اما read که می زنم عمل نمی کنه یا بهتر بگم توی فرم لود که میزارم کد resd رو عمل نمی کنه

کاش این برنامه ای که قرار دادید با پایگاه داده sql بود خیلی خیلی خیلی کمکم می کرد :(:(:(:(:(:(:(:(:(
من کل این چیزایی که خاستی رو انجام دادم . یه بار کامل چک کن ببین جایی اشتباه نکرده باشی هر چی فکر میکنم نمیدونم مشکلت چیه . اگه میشه کدی که نوشتی رو بذار با برنامه رو بذار تا سوال بی جواب نمونه . ممنون
 

tina.programer

عضو جدید
خوب من کل کدی که نوشتمو اینجا گذاشتم من فقط مشکل با کدی ارتباط با دیتابیس هست همین اگه بجای اکسس با sql می نوشتین من کل جواب هام رو می گرفتم
خیلی ناراحتم خیلیییییییییی
 

RIG

متخصص C#.net
تو مشکلت چیه الان؟ مشکل اینه که کانکشن رو نتونستی تنظیم کنی و یا یه چیز دیگه؟ مشکل رو واضح بگو حل میشه؟ تو کانکشن استریگ مشکل داری؟ابجی من برنامه خودتو up کن لطفا". ممنون
 

tina.programer

عضو جدید
خوب اگه می تونستم برنامه رو میزاشتم و اینقدر عذاب نمی کشیدم من کل کدهایی که نوشتم برای برنامم رو گذاشتم
توی پست های قبلی هم گفتم که برنامه هیچ خطایی نمی ده ولی خوب save هم نمیشه توی دیتابیس

و اصلاً عملی رو انجام نمی ده فقط از کومبو باکس وقتی می خوام انتخاب کنم تم عوض میشه بقیه موارد کار نمی کنه اصلاً

:cry:
 

RIG

متخصص C#.net
تو بانکت مقدار دهی اولیه کن تو id باید شماره 1 رو بذاری و تو فیلد demo مقدار Demo1 رو دستی بنویس بعد برنامه رو اجرا کن . اگه حل نشد بگو من sql نداشتم بانک رو باز کنم اما فکر میکنم مشکل همینه . راستش وقت زیادی ندارم بشینم رو برنامه اگه باز حل نشد بگو . برنامه رو هم دیدم من مگه تو برنامه cmd.ExecuteNonQuery استفاده نکردم تو چرا اینو نذاشتی اینجوری که اصلا دستور اجرا نمیشه!!!!:surprised:
کد ها رو که نوشتی بالاتر از
کد:
show()
اینجوری بنویس
کد:
 con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
:gol:
 

tina.programer

عضو جدید
اتفاقاً دادم مقدار توی این پروژه یادم رفت بدم چون ندی که اصلاً درست کار نمی کنه چون آپدیت می کنه دیگه :d

این دستور رو
cmd.ExecuteNonQuery(); جابجا می نوشتم درست اجرا نمی شد الان درست اما یه مشکلی هست

خوب من دوتا فرم دارم یکی فرم اصلی یکی هم فرمی که من این تنظیمات رو انجام میدم

می خوام با هر بار لود شدن فرم خوب برنامه تمش همونی باشه که ست شده توی دیتابیس

اما یه مشکلی هست من کد READ رو توی فرم لود فرم اصلی بنویسم درست کار نمی کنه چون COMBOBOX و ... روی فرم تنظیمات هست
 
آخرین ویرایش:

RIG

متخصص C#.net
همون کد READ رو تو فرم اول بنویس کد
کد:
Combobox.Item.Add(dr["demo"])
باید پاک کنی .
در ضمن
کد:
convert.tostring...
رو بروی textbox رو بردار و جای تکست باکسی که تو خط کد this.skinengin.... بذار . بعدش کلا پاکش کن کدهای text boxo ...:gol::gol:
 

Visual C#

عضو جدید
می دونید مشکل شما چی هست که سرش فکر نمی کنید دارین چی کار میکنید یا چی کار می خواهید بکونید گفت و گو خوندم اشکالات ریز و کوچیک و جالب بود .این skin که شما انتخاب کردی خوب نیست برو سراغ یه skin دیگه امسشا نمی گم چون خیلی باگه رو os برنامه تغییر ایجاد میکنه جالب اینا استفاده کردم حتی رو ویژال استادیو که داشتم کد میزدم تغییر داده بود پیغام و فرم و فونت ها مخصوص باتن ها در هین کد نویسی تغییر کرده بود خوب بود بعد در باره بانک اطلاعاتی الکی بخاطر این روشا حجم به برنامه میدین کار اشتباهی هست رجستری هم بدرد نمی خوره بعضی هستن کارشون همینه برنامه هایی که با دستگیره های رجستری کار میکنند را از کار میندازن و باعث خربی برنامه میشه یه راه عالی هست اونم نمی گم باید فکر کنید می تونید این راه را پیاده کنید این تنها سایتی که زیاد بش برخورد میکنم و اشکالا ریز داخلش فراونه ولی عالیه برای برنامه نویس های تازه کار ولی از اظافه کردن به حجم برنامه تون جدا خوداری فرمایید
 

Similar threads

بالا