ذخیره TabControl در فایل Setting

MRHADI

Member
سلام و درود
من در پروژه فرمی که ساختم یک فایل Setting ایجاد کردم و در اون به راحتی مقادیر Default برای کمبوباکس ها تعیین کردم و الان وقتی فرم باز میشه همون مقادیر قبل از بسته شدن ، در اونها هست،با این کد
کد:
 _f1.comboBox2.Text = Properties.Settings.Default.CMB2;


_f1.comboBox2.SelectedIndexChanged += (d2, l2) =>
                {
                    Properties.Settings.Default.CMB2 = _f1.comboBox2.SelectedItem.ToString();//a
                    Properties.Settings.Default.Save();//a
                };
اما میخوام وقتی فرم بسته شد ،روی همون TabPage باز بشه که موقع بسته شدن بود ولی هر کاری کردم نشد
ممنون میشم راهنمایی بفرمایید
 

the_king

مدیرکل انجمن
سلام و درود
من در پروژه فرمی که ساختم یک فایل Setting ایجاد کردم و در اون به راحتی مقادیر Default برای کمبوباکس ها تعیین کردم و الان وقتی فرم باز میشه همون مقادیر قبل از بسته شدن ، در اونها هست،با این کد
کد:
 _f1.comboBox2.Text = Properties.Settings.Default.CMB2;


_f1.comboBox2.SelectedIndexChanged += (d2, l2) =>
                {
                    Properties.Settings.Default.CMB2 = _f1.comboBox2.SelectedItem.ToString();//a
                    Properties.Settings.Default.Save();//a
                };
اما میخوام وقتی فرم بسته شد ،روی همون TabPage باز بشه که موقع بسته شدن بود ولی هر کاری کردم نشد
ممنون میشم راهنمایی بفرمایید
شبیه همونه.
مقداری که باید ذخیره و بازیابی کنید مشخصه SelectedIndex است، یعنی مقدار f1.tabControl1.SelectedIndex_ رو ذخیره و بازیابی کنید.
رخداد مربوط به تغییر مقدار اش هم SelectedIndexChanged ئه، یعنی Save کردن رو در رخداد f1.tabControl1.SelectedIndexChanged_ انجام می دهید.
کدش شبیه همونه که نوشتید، فقط انگار comboBox2 بشه tabControl1 و بجای CMB2 از یک مقدار از نوع int استفاده بشه.
 

MRHADI

Member
شبیه همونه.
مقداری که باید ذخیره و بازیابی کنید مشخصه SelectedIndex است، یعنی مقدار f1.tabControl1.SelectedIndex_ رو ذخیره و بازیابی کنید.
رخداد مربوط به تغییر مقدار اش هم SelectedIndexChanged ئه، یعنی Save کردن رو در رخداد f1.tabControl1.SelectedIndexChanged_ انجام می دهید.
کدش شبیه همونه که نوشتید، فقط انگار comboBox2 بشه tabControl1 و بجای CMB2 از یک مقدار از نوع int استفاده بشه.
سلام
اگر ممکنه لطفا همین مورد رو برای آیتم های تیک خورده CheckedListBox و همینطور Visible بودن یا نبودن یک کنترل هم بفرمایید
 

the_king

مدیرکل انجمن
سلام
اگر ممکنه لطفا همین مورد رو برای آیتم های تیک خورده CheckedListBox و همینطور Visible بودن یا نبودن یک کنترل هم بفرمایید
Visible بودن کنترل رو با ذخیره کردن همون Visible انجام می دهید، مثلا button1.Visible
رخداد تغییر مقدارش هم که VisibleChanged ئه، مثلا button1.VisibleChanged
برای CheckedListBox کد بیشتری مورد نیاز ئه، به دو دلیل، اول اینکه باید اطلاعات CheckState آیتم ها رو بصورت قابل ذخیره کردنی مثل string در بیاورید و ثانیا برای اطلاع از تغییر یافتن تیک ها باید منتظر وقوع رخداد ItemCheck باشید ولی رخداد ItemCheck زمانی رخ میده که میخواد تیک تغییر کنه، نه بعد از اینکه تیک تغییر کرد. برای همین اطلاعاتی که ItemCheck میده به روز نیست و قبل از ذخیره شدن باید تکمیل بشه.
کد:
        private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            var c = (CheckedListBox)sender;
            if (c.Tag is bool)
            {
                return;
            }
            var items = new CheckState[c.Items.Count];
            for (var i = 0; i < items.Length; i++)
            {
                items[i] = c.GetItemCheckState(i);
            }
            items[e.Index] = e.NewValue;
            var output = new StringBuilder();
            foreach (var item in items)
            {
                output.Append($"{(int)item}");
            }
            Properties.Settings.Default.CheckedListBox1 = output.ToString();
            Properties.Settings.Default.Save();
        }
کد:
            var input = Properties.Settings.Default.CheckedListBox1;
            checkedListBox1.Tag = false;
            for (var i = 0; (i < input.Length) && (i < checkedListBox1.Items.Count); i++)
            {
                checkedListBox1.SetItemCheckState(i, (CheckState)int.Parse(input[i].ToString()));
            }
            checkedListBox1.Tag = null;
 

the_king

مدیرکل انجمن
سلام و سپاس فراوان
دم شما گرم،ای ولله
آقا به این قطعه کد خطا میده
ویژوال استدیو تون قدیمی است و قابلیت های نسخه های جدیدتر زبان #C رو پشتیبانی نمی کنه. بجای ""$ که کامپایلرتون نمیشناسه از string.Format یا ToString. یا هیچکدوم استفاده کنید :
کد:
                output.Append(string.Format("{0}", (int)item));
کد:
                output.Append(((int)item).ToString());
کد:
                output.Append((int)item);
 

MRHADI

Member
ویژوال استدیو تون قدیمی است و قابلیت های نسخه های جدیدتر زبان #C رو پشتیبانی نمی کنه.
ممنون
خدا خیر و سلامتی بهتون بده
ورژن 2017 هست،یعنی این قابلیت رو فقط 2019 پشتیبانی میکنه؟
البته من مجبورم با ورژن 2017 کار کنم،فقط محض اطلاع پرسیدم
 

the_king

مدیرکل انجمن
ممنون
خدا خیر و سلامتی بهتون بده
ورژن 2017 هست،یعنی این قابلیت رو فقط 2019 پشتیبانی میکنه؟
البته من مجبورم با ورژن 2017 کار کنم،فقط محض اطلاع پرسیدم
نه. انتظار داشتم بگید Visual Studio 2013 یا قدیمی تر رو استفاده می کنید.
اتفاقا Visual Studio 2017 قطعا پشتیبانی اش می کنه. ""$ یا به عبارتی string interpolation در #C نسخه 6.0 اضافه شده که نسخه مورد استفاده Visual Studio 2015 است (حتی در نسخه 2013 آپدیت شده هم هست).
Visual Studio 2017 همراه نسخه 7.0 #C ئه که خودم هم ازش استفاده می کنم.
language.png
ولی اگه در Visual Studio 2017 تون در Properties پروژه زبانه Build دکمه ...Advanced رو انتخاب کنید، یک گزینه Language version داره که میگه این پروژه باید با #C نسخه چندم کامپایل بشه.
ممکنه با دستکاری کردن مقدار پیشفرض اون ناخواسته نسخه #C مورد استفاده رو پایین آورده باشید. اگه از C# 6.0 نسخه پایینتری رو بکار ببرید دیگه ""$ رو نمیشناسه.
در حالت عادی و با مقدار پیشفرض latest major version دلیلی نداره که در پروژه هایی که با Visual Studio 2017 باز می کنید برای ""$ (string interpolation) پیام خطا دریافت کنید.
 

MRHADI

Member
نه. انتظار داشتم بگید Visual Studio 2013 یا قدیمی تر رو استفاده می کنید.
اتفاقا Visual Studio 2017 قطعا پشتیبانی اش می کنه. ""$ یا به عبارتی string interpolation در #C نسخه 6.0 اضافه شده که نسخه مورد استفاده Visual Studio 2015 است (حتی در نسخه 2013 آپدیت شده هم هست).
Visual Studio 2017 همراه نسخه 7.0 #C ئه که خودم هم ازش استفاده می کنم.
مشاهده پیوست 113443
ولی اگه در Visual Studio 2017 تون در Properties پروژه زبانه Build دکمه ...Advanced رو انتخاب کنید، یک گزینه Language version داره که میگه این پروژه باید با #C نسخه چندم کامپایل بشه.
ممکنه با دستکاری کردن مقدار پیشفرض اون ناخواسته نسخه #C مورد استفاده رو پایین آورده باشید. اگه از C# 6.0 نسخه پایینتری رو بکار ببرید دیگه ""$ رو نمیشناسه.
در حالت عادی و با مقدار پیشفرض latest major version دلیلی نداره که در پروژه هایی که با Visual Studio 2017 باز می کنید برای ""$ (string interpolation) پیام خطا دریافت کنید.
ممنون از توضیحات کامل
به قسمتی که فرمودید رفتم و دیدم که هیچ گزینه ای انتخاب نشده و خالی هست
مطمئن هستم که دستکاری هم نشده
شاید چون پروژه توسط برنامه دیگه ای به Visual Studio منتقل شده به صورت اتوماتیک اینطوری تعریفش کرده
 

جدیدترین ارسال ها

بالا