گفتگو هایی در باب سی شارپ

the_king

مدیرکل انجمن
خیلی ممنون از جوابتون.
بعد اینکه استاد به نظرتون برای بکاپ گیری ، درایوهای فلشی که فرمت ntfs دارن را (توی لیست درایوهای نرم افزار) قرار بدم؟
چون میگم کاربر ممکنه توی کامپیوتر خودش ، ازش بکاپ بگیره اما اون فلش رو ببره توی یه سیستم دیگه و اونجا تغییراتی بده اما اون کامپیوتر ، سرویس بکاپ vss اش فعال نباشه و موقع on write ، بکاپی ازش نگیره و بکاپ خراب بشه . البته اینکه سرویس vss ای غیر فعال باشه ، خیلی کم پیش میاد چون بصورت پیش فرض ، موقع نصب ویندوز ، فعاله.
اصلا حدسم درسته؟
با این حال ، شما چی پیشنهاد میدین؟ به نظرتون درایوهای قابل حملی که فرمت ntfs دارن رو اضافه کنم؟
این همه در مورد VSS و مکانیسم کارش گفتگو کردیم، اونوقت الان به این فکر می کنید که محل backup یک درایو سیار باشه؟ اینکه backup عادی نیست.
درایوهای usb (حتی اگه ntfs هم باشن) ، در properties شون اصلا سربرگ previous version رو ندارن !
نه پادویش و نه این برنامه ام ، نمیتونن ازش بکاپی تهیه کنن .
چرا؟ بخاطر همونی هه که شاید در سیستم دیگه ای که این فلش متصل میشه ، سرویس vss غیر فعال باشه و همونجا تغییراتی در فلش داده باشن و بنابراین سرویس و بکاپ ، موقع on write نتونه تغییرات را در بکاپِ فلش اِعمال کنه و بکاپ خراب بشه؟ واسه همین قابلیت بکاپ را از درایوهای قابل حمل ، حذف کردن؟

قرار نیست دو تا سیستم متفاوت VSS یکسان و سازگاری داشته باشند یا وظیفه نیمه کاره سیستم دیگری رو تکمیل کنند. VSS چطور میتونه تضمین کنه بین این جابجایی فلش درایو توسط منبع سومی بازنویسی شده یا نه؟ نمیتونه.
از طرف دیگه درایوی که موقع بوت شدن سیستم قطعی بهش وصل نیست یا موقع خاموش شدن سیستم هم الزاما متصل نمونده ویژگی های لازم برای اینکار رو نداره.
بعد اینکه به نظرتون این قابلیت رو بذارم که در صورتی که بکاپ نتونست تهیه کنه و تهیه نکردنش ، ممکنه بخاطرِ غیر فعال بودن سرویس vss طرف بوده باشه (یا کلا مشکلات مربوط به سرویس vss) را از توی برنامه ، سرویس vss کاربر را فعال کنم؟
پادویش که با سرویس vss کاری نداره و همه ی تنظیمات (فعال بودن یا نبودن و ...) را به کاربر سپرده.
نه. میتوانید در موردش راهنمایی اضافه کنید که کاربر چطور اینکار رو انجام بده، ولی تغییر تنظیمات سیستم رو نباید خود برنامه تون انجام بده.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
این همه در مورد VSS و مکانیسم کارش گفتگو کردیم، اونوقت الان به این فکر می کنید که محل backup یک درایو سیار باشه؟ اینکه backup عادی نیست.

خیلی ممنون
نه . من نگفتم محل بکاپِ یک درایوِ هارد را توی فلش بریزیم .
منظورم این بود که از خودِ فلش بکاپ بگیریم و توی خودِ فلش بریزیم.


قرار نیست دو تا سیستم متفاوت VSS یکسان و سازگاری داشته باشند یا وظیفه نیمه کاره سیستم دیگری رو تکمیل کنند. VSS چطور میتونه تضمین کنه بین این جابجایی فلش درایو توسط منبع سومی بازنویسی شده یا نه؟ نمیتونه.
از طرف دیگه درایوی که موقع بوت شدن سیستم قطعی بهش وصل نیست یا موقع خاموش شدن سیستم هم الزاما متصل نمونده ویژگی های لازم برای اینکار رو نداره.

نه. میتوانید در موردش راهنمایی اضافه کنید که کاربر چطور اینکار رو انجام بده، ولی تغییر تنظیمات سیستم رو نباید خود برنامه تون انجام بده.

ممنون
 

the_king

مدیرکل انجمن
خیلی ممنون
نه . من نگفتم محل بکاپِ یک درایوِ هارد را توی فلش بریزیم .
منظورم این بود که از خودِ فلش بکاپ بگیریم و توی خودِ فلش بریزیم.
ممنون
همون شد دیگه. شما میخواهید Backup ئه copy on write از منبعی بگیرید که write اش همواره تحت نظارت نیست، نمیشه همچین چیزی.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
بله چون write اش همیشه تحت نظارت نمیبود ، سئوال پرسیدم ها :green: حالا بگذرد . چون اصلا درایوهای removable قابل بکاپ گیری نیستن.

بعد اینکه ، یه کمپوننتی وجود نداره که شبیه MessageBox.Show عمل کنه اما بسیار دست آدم را بازتر کنه؟ یعنی چیزی شبیه اینی میخوام که صفحه های پیغام ها در آنتی ویروس ها هشدار میدن . یعنی اینکه بشه ابعاد ، رنگ ، opacity و حتی نام دکمه ای که نمایش میده و location (نسبت به صفحه ی اصلی و دسکتاپ) را خودمون مشخص کنیم . حتی caption هم نداشته باشن و هم اینکه گاها اگه خواستیم ، بصورت انیمیشنی ظاهر بشن . در صورت نیاز ، دکمه های سئوالی هم داشته باشن .
توی کمپوننت های تلریک گشتم ، هر چند یکی وجود داشت اما این جکری نبود . بیشتر شبیه MessageBox خود دات نت بود.
من بخوام همچین چیزی بسازم ، فکر کنم طول بکشه . شاید چند روز طول بکشه. کلا خواستم اول بدونم که همچین کمپوننتی وجود نداره؟

--------------------------------------------------------------------------

ویرایش :

انگار پیدا کردم . تلریک یه کمپوننت ای بنام Desktop Alert داره که خیلی شبیه چیزی هه که میخوام.
 
آخرین ویرایش:

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد علی ، این کمپوننت تلریک UI Framework ، انگار یکی از کارهاش اینه که کار TransparentControl ای که من نوشتم را میکنه . درسته؟ یعنی alpha هر چقدر که کم باشه ، به همون نسبت ، پشت زمینه را نشون میده :

UI Framework Control - Telerik UI for WinForms Components - Telerik

اما با اونکه گفته این کمپوننت برای winform هست ، ولی من کمپوننت مربوط به winform تلریک را نصب کردم ، همچین کنترلی توش نبود .
یا مثلا در لیست این صفحه :

Comprehensive UI toolbox of 130+ controls - Telerik UI for WinForms

چند تا از کمپوننت هایی که نام برده ، توی لیست این کمپوننت هام نیستن مثل کمپوننت Clock
کلا آیا میتونم کمپوننت تلریک UI Framework را برای winform نصب کنم؟ اگه آره ، فایل اش کدومه؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
بعد اینکه در کمپوننت تلریک ، بعد از نصب و add reference کردنِ Telerik.WinControls.UI و استفاده از RadMessageBox در کد زیر :

کد:
            Telerik.WinControls.RadMessageBox.SetThemeName("CrystalDark");
            Telerik.WinControls.RadMessageBox.Show("سلام");

هر چی تم میدم ، فرقی نمیکنه.
نام تم ها را نمیدونم از کجا بگیرم (هر چی گشتم جایی پیدا نکردم) جز اینکه موقع نصب کمپوننت تلریک برای winform ، نرم افزار progress telerik ui for winform اتوماتیک نصب شد که دموی این کمپوننت ها را داره و با انتخاب یک کمپوننت ، تنظیمات تم رو هم داره . نام تم ها را از اونجا میگیرم . اونجا ، توی اون نرم افزار ، تم را انتخاب میکنیم ، کار میکنه .
اینجا مشکل از چیه که تم ها کار نمیکنه؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
بعد اینکه در کمپوننت تلریک ، بعد از نصب و add reference کردنِ Telerik.WinControls.UI و استفاده از RadMessageBox در کد زیر :

کد:
            Telerik.WinControls.RadMessageBox.SetThemeName("CrystalDark");
            Telerik.WinControls.RadMessageBox.Show("سلام");

هر چی تم میدم ، فرقی نمیکنه.
نام تم ها را نمیدونم از کجا بگیرم (هر چی گشتم جایی پیدا نکردم) جز اینکه موقع نصب کمپوننت تلریک برای winform ، نرم افزار progress telerik ui for winform اتوماتیک نصب شد که دموی این کمپوننت ها را داره و با انتخاب یک کمپوننت ، تنظیمات تم رو هم داره . نام تم ها را از اونجا میگیرم . اونجا ، توی اون نرم افزار ، تم را انتخاب میکنیم ، کار میکنه .
اینجا مشکل از چیه که تم ها کار نمیکنه؟

سلامی مجدد
اینو متوجه شدم
اول ، بعد از نصب تلریک ، از پنجره ی toolbox ، از قسمت telerik ui for winform - theme ، باید تم ها را (به فرم) اضافه کنیم (با این کار ، تم های مورد نظر ، در reference اضافه میشن . شاید لازم باشه Telerik.WinControls.UI را هم add reference کنیم) و بعد میتونیم از همون شی های تم یا اینکه در مسیر Telerik.WinControls.Themes ، تم مورد نظر را بسازیم (و با پروپرتی ThemeName ، به ورودی متد Telerik.WinControls.RadMessageBox.SetThemeName در کد پست بالا که نوشتم ، بدیم) :

کد:
            Telerik.WinControls.Themes.CrystalDarkTheme theme = new Telerik.WinControls.Themes.CrystalDarkTheme();
            Telerik.WinControls.RadMessageBox.SetThemeName(theme.ThemeName);
            Telerik.WinControls.RadMessageBox.Show("سلام");
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد علی ، این کمپوننت تلریک UI Framework ، انگار یکی از کارهاش اینه که کار TransparentControl ای که من نوشتم را میکنه . درسته؟ یعنی alpha هر چقدر که کم باشه ، به همون نسبت ، پشت زمینه را نشون میده :

UI Framework Control - Telerik UI for WinForms Components - Telerik

اما با اونکه گفته این کمپوننت برای winform هست ، ولی من کمپوننت مربوط به winform تلریک را نصب کردم ، همچین کنترلی توش نبود .
یا مثلا در لیست این صفحه :

Comprehensive UI toolbox of 130+ controls - Telerik UI for WinForms

چند تا از کمپوننت هایی که نام برده ، توی لیست این کمپوننت هام نیستن مثل کمپوننت Clock
کلا آیا میتونم کمپوننت تلریک UI Framework را برای winform نصب کنم؟ اگه آره ، فایل اش کدومه؟
نمیدونم. اطلاعی ندارم.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد بر استاد علی
خیلی ممنون .
میگم میخوام صفحه ی "تنظیمات" رو بسازم . دکمه ی ok و cancel هم داره که طبعا مشخص هست کارشون چیه . مشخص هست تا کاربر ، ok را کلیک نکرد ، هر تغییری در تنظیمات که انجام داد ، عملیاتی نمیشه. حالا مشکل اینجاست که مثلا کاربر ، 6 تا از تنظیمات را تغییر داده و 4 تا را نداده (تصادفی هم تغییر داده . یعنی به ترتیبِ گزینه هایی که وجود داره ، تغییر نداده) .
حالا بعد از زدنِ دکمه ی ok ، از کجا میشه متوجه شد کدوم ها را تغییر داده و کدوم ها را نداده؟



راه حل من اینه . ببینید همین روش را برم ، درسته؟ :

اینکه اول ، برای هر تنظیم و گزینه ، یه پروپرتی (با نوعِ مورد نظری که لازم دارم) به عنوان پروپرتی اصلی در نظر بگیرم . توی قسمتِ set اش هم کارهای مربوط به تغییرِ اون تنظیم را انجام بدم .

یه ایندکسر (احتمالا دو بعدی) ، معادل و نظیرِ این پروپرتیِ اصلی در نظر بگیرم . (چون کاربر چندین گزینه را میتونه تغییر بده پس باید توی لیست یا آرایه یا ایندکسر بریزیم) . هر ایندکس در ایندکسر را نشونه ی عضو مشخصی از اون پروپرتی ها میذارم . مثلا ایندکس 1 ، معادلِ مثلا پروپرتی A در این کلاس باشه و ... . ایندکسر را بین شون (بین آرایه و لیست) انتخاب کردم تا در قسمت set اش این کد را بنویسم که معادلِ اون پروپرتیِ اصلی شو (که در خطوط بالا توضیح دادم) ، مقداردهی کنه . ایندکسر را دو بعدی گرفتم ، چون صفحه ی تنظیمات ، tab بندی هست . ایندکس در بُعدِ اول ، معدل شماره ی صفحه باشه و ایندکس در بُعدِ دوم ، معادلِ اون پروپرتیِ اصلی باشه.

حالا ، یه آرایه ی دو بعدیِ temp ، معادل و نظیرِ اون ایندکسر (که برای پروپرتی های اصلی در نظر گرفتیم) ، در نظر بگیرم . (چون فقط زمانی میخوام تغییرات را به آرایه ی پروپرتی اصلی منتقل کنه که کاربر دکمه ی ok را کلیک کرده باشه یعنی همون لحظه که کاربر ، تنظیمات را تغییر داد ، نمیخوام در پروپرتیِ اصلی اِعمال کنه . پس باید توی آرایه ی موقت بریزم.) . بعد از زدنِ گزینه ی ok ، همه ی عضوهای آرایه ی temp را در ایندکسرِ اون کلاسِ "تنظیمات" میریزم .

این روش را پیشنهاد میدین یا اینکه به نظرتون رویداد براشون بذارم؟ یا اینکه روش دیگه ای؟
 

the_king

مدیرکل انجمن
سلامی مجدد بر استاد علی
خیلی ممنون .
میگم میخوام صفحه ی "تنظیمات" رو بسازم . دکمه ی ok و cancel هم داره که طبعا مشخص هست کارشون چیه . مشخص هست تا کاربر ، ok را کلیک نکرد ، هر تغییری در تنظیمات که انجام داد ، عملیاتی نمیشه. حالا مشکل اینجاست که مثلا کاربر ، 6 تا از تنظیمات را تغییر داده و 4 تا را نداده (تصادفی هم تغییر داده . یعنی به ترتیبِ گزینه هایی که وجود داره ، تغییر نداده) .
حالا بعد از زدنِ دکمه ی ok ، از کجا میشه متوجه شد کدوم ها را تغییر داده و کدوم ها را نداده؟



راه حل من اینه . ببینید همین روش را برم ، درسته؟ :

اینکه اول ، برای هر تنظیم و گزینه ، یه پروپرتی (با نوعِ مورد نظری که لازم دارم) به عنوان پروپرتی اصلی در نظر بگیرم . توی قسمتِ set اش هم کارهای مربوط به تغییرِ اون تنظیم را انجام بدم .

یه ایندکسر (احتمالا دو بعدی) ، معادل و نظیرِ این پروپرتیِ اصلی در نظر بگیرم . (چون کاربر چندین گزینه را میتونه تغییر بده پس باید توی لیست یا آرایه یا ایندکسر بریزیم) . هر ایندکس در ایندکسر را نشونه ی عضو مشخصی از اون پروپرتی ها میذارم . مثلا ایندکس 1 ، معادلِ مثلا پروپرتی A در این کلاس باشه و ... . ایندکسر را بین شون (بین آرایه و لیست) انتخاب کردم تا در قسمت set اش این کد را بنویسم که معادلِ اون پروپرتیِ اصلی شو (که در خطوط بالا توضیح دادم) ، مقداردهی کنه . ایندکسر را دو بعدی گرفتم ، چون صفحه ی تنظیمات ، tab بندی هست . ایندکس در بُعدِ اول ، معدل شماره ی صفحه باشه و ایندکس در بُعدِ دوم ، معادلِ اون پروپرتیِ اصلی باشه.

حالا ، یه آرایه ی دو بعدیِ temp ، معادل و نظیرِ اون ایندکسر (که برای پروپرتی های اصلی در نظر گرفتیم) ، در نظر بگیرم . (چون فقط زمانی میخوام تغییرات را به آرایه ی پروپرتی اصلی منتقل کنه که کاربر دکمه ی ok را کلیک کرده باشه یعنی همون لحظه که کاربر ، تنظیمات را تغییر داد ، نمیخوام در پروپرتیِ اصلی اِعمال کنه . پس باید توی آرایه ی موقت بریزم.) . بعد از زدنِ گزینه ی ok ، همه ی عضوهای آرایه ی temp را در ایندکسرِ اون کلاسِ "تنظیمات" میریزم .

این روش را پیشنهاد میدین یا اینکه به نظرتون رویداد براشون بذارم؟ یا اینکه روش دیگه ای؟
کاری که من در اینجور موارد انجام میدم الگوریتم پیچیده ای نداره، یک struct به عنوان تنظیمات میسازم که فیلد های اون تنظیم های مورد نظر شما است، با نام مشخص و واضح. اون نام رو هم در اسامی فیلد ها رعایت می کنم و هم در نام کنترل های روی فرم تنظیمات.
با یک روتین مثل LoadSettings مقادیر فیلدهای اون struct پر میشه، حالا منبعش فایله یا Properties.Settings.Default یا Registry یا Stream فرقی نمی کنه. این روتینی است که قبل از اینکه فرم تنظیمات نمایش داده بشه اجرا خواهد شد.
با یک روتین مثل ShowSettings مقادیر فیلد های اون struct در فرم تنظیمات نمایش داده میشه، بنابر این داخل کلاس فرم نوشته میشه. این روتین برای مواقعی است که رخداد Form.Shown اجرا میشه.
با یک روتین مثل UpdateSettings مقادیر فیلد های اون struct با مقادیر انتخاب شده در فرم تنظیمات بروز میشن، این روتین برای مواقعی است که دارید فرم تنظیمات رو OK می کنید تا بسته بشه.
با یک روتین مثل SaveSettings تنظیمات داخل struct ثبت خواهند شد، در فایل یا Properties.Settings.Default یا Registry یا Stream یا هر چیز دیگری. این روتینی است که بعد از اینکه پنجره تنظیمات بسته شد و قصد ثبت شون رو دارید اجرا میشه.
از اونجایی که تنظیمات در struct ذخیره میشه می توانید یک نسخه قبل از ارسال به فرم تنظیمات داشته باشید و یک نسخه بعد از ارسال به فرم بدست بیارید و با هم مقایسه کنید.

از طرف دیگه شما لیست فیلد ها و لیست کنترل ها رو با اسم مشخص در اختیار دارید، چه در فرم که به Controls دسترسی دارید و چه در struct که به GetType().GetFields و مواردی از این دست دسترسی دارید.
پس نیازی نیست که حتما دونه دونه مقادیر رو سطر به سطر بین کنترل و struct با کد نویسی ربط بدید یا موقع خوندن مقادیر از فایل یا نوشتن در فایل دونه دونه شون رو با اسم مشخص کنید.
شما می توانید با حلقه foreach از قابلیت مجموعه Controls یا System.Reflection استفاده کنید و کدی رو بنویسید که حتی اگه تنظیمی به struct یا فرم اضافه شد بدون نیاز به تغییر کد درست عمل کنه.
مثلا وقتی میخواد برای فیلد bool AutoStartup کنترلی برای نمایش پیدا کنه، دنبال radioButton" + System.Reflection.FieldInfo.Name" روی فرم بگرده و برعکس.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد علی . حالا دقیق به این بخش رسیدم ، اگه سئوالی داشتم ، ازتون میپرسم.

من از کنترل تلریک بنام radPageView استفاده میکنم .(کنترلی هه که میشه چند صفحه را توش قرار داد و همزمان فقط یک صفحه را نشون میده. یه جورایی عملکردش شبیه کنترل tab توی دات نت هه) . این کنترل ، دو بخش داره . یه بخش root element (که مثلا جایی هست که نام صفحات برای انتخاب قرار میگیره) و یه بخش view element (که بخشی هه که صفحات نمایش داده میشن) .
حالا بخش root element اش خیلی پهناش بزرگه . میخوام کوچیکترش کنم . در پروپرتی RootElement ، زیر بخش های وسییعی داره. انواع پروپرتی های size و bound و location داره که هر کدوم شو تغییر میدم ، بخش root element اش تغییر اندازه نمیده .

نمیدونین برای تغییر اندازه ی root element باید چی کار کنم؟
اگه رنگِ پشت زمینه ی root element رو هم میشد عوض کرد ، خوب میشد (هر چند ویژگی های رنگ هاش را هم دستکاری کردم ولی جواب نداد!) ولی تغییر اندازه ، خیلی مهمتره.
خیلی ممنون
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد علی . حالا دقیق به این بخش رسیدم ، اگه سئوالی داشتم ، ازتون میپرسم.

من از کنترل تلریک بنام radPageView استفاده میکنم .(کنترلی هه که میشه چند صفحه را توش قرار داد و همزمان فقط یک صفحه را نشون میده. یه جورایی عملکردش شبیه کنترل tab توی دات نت هه) . این کنترل ، دو بخش داره . یه بخش root element (که مثلا جایی هست که نام صفحات برای انتخاب قرار میگیره) و یه بخش view element (که بخشی هه که صفحات نمایش داده میشن) .
حالا بخش root element اش خیلی پهناش بزرگه . میخوام کوچیکترش کنم . در پروپرتی RootElement ، زیر بخش های وسییعی داره. انواع پروپرتی های size و bound و location داره که هر کدوم شو تغییر میدم ، بخش root element اش تغییر اندازه نمیده .

نمیدونین برای تغییر اندازه ی root element باید چی کار کنم؟
اگه رنگِ پشت زمینه ی root element رو هم میشد عوض کرد ، خوب میشد (هر چند ویژگی های رنگ هاش را هم دستکاری کردم ولی جواب نداد!) ولی تغییر اندازه ، خیلی مهمتره.
خیلی ممنون

منظورم از پست بالا ، این قسمتِ زرد رنگ هه (که دکمه هست و آخرش یه نوارِ باریکِ آبی هست) . میخوام این تیکه ، کوچیک تر شه (یعنی میخوام خطِ آبی ای که کنار دکمه ی زرد رنگ هست ، حدود 200 پیکسل به طرفِ سمت راست بیاد و همینطور قسمتِ سمت چپ اش که صفحات قرار میگیرن ، بزرگتر بشه). شدنی هه؟ :


1.JPG

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

How do I implement Telerik RadPageView with minimum height requirement?

اگه رنگِ پشت زمینه ی دکمه (که زرد هه) ، بشه عوض بشه که خیلی بهتر میشه . هر چند با تِم دادن ، تا حدودی حل میشه.
یا اینکه یه کمپوننت یا کننرلی (از شرکت دیگه یا هر چی) نیست که کار این کنترل radPageView را انجام بده؟ و بجای این ، از اون استفاده کنم.

--------------------------------------------------------------------------------

ویرایش :

جواب را پیدا کردم :

https://stackoverflow.com/questions/46406518/resizing-right-panel-of-radpageview-in-backstage-mode-telerik-winforms-c-sharp

سایت تلریک تا دو روز پیش خوب بود . الان باز نمیشه!
 
آخرین ویرایش:

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، میخواتم بگم که رنگ آبی برای border در تصویر زیر چطوره؟ همین باشه یا سیاه بهتره؟
آخر ، بجز این کمپوننت ، نمیدونین که مایکروسافت ، یا شرکت دیگه ای (یا حتی کسی) ، شبیه این کمپوننت را ساخت یا نه؟

نمیدونم این چه طراحی ای بود برای RadPageView انجام دادن . این قدر تنظیمات گیج و گمراه کننده داره که .
یه روزه دارم کار میکنم تا فقط اندازه و رنگ حاشیه و قسمت های مختلف را تنظیم کنم.

آخر هم نتونستم حاشیه ای بین root element و view element پیدا کنم که چجوری میذارن . (خط و حاشیه ی آبی در شکل در پست بالا که گذاشته بودم)


1.JPG

برای اینکه فرق بین قسمت های root element (قسمت راست که دکمه های انتخاب صفحه هست و نوشته "برنامه" و "ظاهر") و view element (سمت چپ اش) مشخص بشه ، رنگ قسمت root element را تغییر بدم به نظرتون؟
سمت چپ (100 پیکسل آخر . یعنی زیر نوشته ی "تنظیمات") ، دکمه های "تایید" و "لغو" قرار میگیره.
 

the_king

مدیرکل انجمن
سلام
استاد علی ، میخواتم بگم که رنگ آبی برای border در تصویر زیر چطوره؟ همین باشه یا سیاه بهتره؟
آخر ، بجز این کمپوننت ، نمیدونین که مایکروسافت ، یا شرکت دیگه ای (یا حتی کسی) ، شبیه این کمپوننت را ساخت یا نه؟

نمیدونم این چه طراحی ای بود برای RadPageView انجام دادن . این قدر تنظیمات گیج و گمراه کننده داره که .
یه روزه دارم کار میکنم تا فقط اندازه و رنگ حاشیه و قسمت های مختلف را تنظیم کنم.

آخر هم نتونستم حاشیه ای بین root element و view element پیدا کنم که چجوری میذارن . (خط و حاشیه ی آبی در شکل در پست بالا که گذاشته بودم)


مشاهده پیوست 112494

برای اینکه فرق بین قسمت های root element (قسمت راست که دکمه های انتخاب صفحه هست و نوشته "برنامه" و "ظاهر") و view element (سمت چپ اش) مشخص بشه ، رنگ قسمت root element را تغییر بدم به نظرتون؟
سمت چپ (100 پیکسل آخر . یعنی زیر نوشته ی "تنظیمات") ، دکمه های "تایید" و "لغو" قرار میگیره.
طراحی باید بر اساس سلیقه شما باشه، نه نظر من. وقتی کل اجزاء رو چیدید و ظاهر فرم کاملا مشخص شد اونوقت بهتر میتوانید تصمیم بگیرید که چه تغییراتی میتونه بهترش کنه. وگرنه وقتی فرم خالیه تصمیم گرفتن مشکله.
کمپوننت ها هر چقدر کاملتر باشند، پیچیده تر هستند، در این هیچ شکی نیست که اول باید راهنمای استفاده کمپوننت رو بخونید و بعد شروع به استفاده اش کنید.
در ضمن حجم نرم افزار هم با اضافه کردن مجموعه کمپوننت ها بالا میره، این مساله رو در نظر بگیرید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد
میگم من بجز تلریک ، بقیه ی کمپوننت های شرکت های دیگه مثل .NetBar و DevExpress را هم نصب کردم . دات نت بار که انگار خوب کار نکرد .
اما DevExpress چیزی از تلریک کمتر نداره و در نگاه اول به نظر میرسه که ساده تر هم باشه . منتها وسعت کمپوننت هاش خیلی زیاده . هر چند ، همین کنترل تلریک هم پاسخگوی من هست ولی بخاطر تنظیمات پیچیده اش (و احیانا زیاد شدن حجم) ، ببینم میتونم کنترلی شبیه همین اش از شرکت های دیگه پیدا کنم یا نه .
الان در تصویر در پست بالا ، شما میدونین من چه کنترلی میخوام دیگه؟ یه جوری شبیه prefrence در photoshop 2019 میخوام . یعنی دقیقا مثل کنترل در تصویر پست قبلی ام.
من توی سایت اش گشتم ، انگار خیلی از کنترل هاش هستن که به کارم میخوره اما انگار بین این کنترل هایی که گشتم و تست کردم ، هیچ کدومش دقیق برای این کار طراحی نشد . من کنترل های accordion Control و navigation Pane را بصورت سطحی بررسی کردم . همینطور در سایتش کنترل NavigationFrame را هم دیدم . کارکردشون شبیه هم هستن و نمیدونم کدوم شون به کارم دقیق تر میاد تا دقیق تر بررسی اش کنم . حالا بقیه ی کنترل هاش را نمیدونم . ولی بازم باید شبیه شون توی DevExpress باشن.
خیلی ممنون میشم توی انتخاب کنترلش کمکم کنید.
 
آخرین ویرایش:

the_king

مدیرکل انجمن
خیلی ممنون استاد
میگم من بجز تلریک ، بقیه ی کمپوننت های شرکت های دیگه مثل .NetBar و DevExpress را هم نصب کردم . دات نت بار که انگار خوب کار نکرد .
اما DevExpress چیزی از تلریک کمتر نداره و در نگاه اول به نظر میرسه که ساده تر هم باشه . منتها وسعت کمپوننت هاش خیلی زیاده . هر چند ، همین کنترل تلریک هم پاسخگوی من هست ولی بخاطر تنظیمات پیچیده اش (و احیانا زیاد شدن حجم) ، ببینم میتونم کنترلی شبیه همین اش از شرکت های دیگه پیدا کنم یا نه .
الان در تصویر در پست بالا ، شما میدونین من چه کنترلی میخوام دیگه؟ یه جوری شبیه prefrence در photoshop 2019 میخوام . یعنی دقیقا مثل کنترل در تصویر پست قبلی ام.
من توی سایت اش گشتم ، انگار خیلی از کنترل هاش هستن که به کارم میخوره اما انگار بین این کنترل هایی که گشتم و تست کردم ، هیچ کدومش دقیق برای این کار طراحی نشد . من کنترل های accordion Control و navigation Pane را بصورت سطحی بررسی کردم . همینطور در سایتش کنترل NavigationFrame را هم دیدم . کارکردشون شبیه هم هستن و نمیدونم کدوم شون به کارم دقیق تر میاد تا دقیق تر بررسی اش کنم . حالا بقیه ی کنترل هاش را نمیدونم . ولی بازم باید شبیه شون توی DevExpress باشن.
خیلی ممنون میشم توی انتخاب کنترلش کمکم کنید.
مجموعه کنترل های پیچیده و آماده شاید زمانی لازمتون باشه که بخواهید یک مجموعه رو کامل استفاده کنید، وگرنه بخاطر یک قابلیت جزئی و ساده ارزش نداره حجم پروژه تون رو بالا ببرید.
من پیشنهاد می کنم سعی کنید خودتون بسازیدش. هم مباحث جدیدی رو یاد می گیرید و هم صاحب کمپوننت های بدرد بخوری برای خودتون میشید.
برای ساده تر کردن کار می توانید نحوه نمایش یک ListBox رو عوض کنید، DrawMode اش را به OwnerDrawFixed تغییر بدید، ItemHeight اش رو تنظیم کنید و با رخداد DrawItem ظاهرش رو متحول کنید.
تغییر رسم ListBox خیلی ساده تر از اون چیزیه که به نظر میاد. حتی میتوانید بهش Hover اضافه کنید که ماوس با بردن روی گزینه ها ظاهر خاصی بهشون بده. شبیه منوی ویندوز 7
menu.jpg
یا می توانید گوشه گزینه انتخاب شده رو مثلث دار رسم کنید که انتخاب شدنش واضح تر باشه :
manu2.jpg
ساختن اینها راحت تر از سر و کله زدن با کمپوننت هایی است که پروژه رو سنگین می کنند.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
مجموعه کنترل های پیچیده و آماده شاید زمانی لازمتون باشه که بخواهید یک مجموعه رو کامل استفاده کنید، وگرنه بخاطر یک قابلیت جزئی و ساده ارزش نداره حجم پروژه تون رو بالا ببرید.
من پیشنهاد می کنم سعی کنید خودتون بسازیدش. هم مباحث جدیدی رو یاد می گیرید و هم صاحب کمپوننت های بدرد بخوری برای خودتون میشید.
برای ساده تر کردن کار می توانید نحوه نمایش یک ListBox رو عوض کنید، DrawMode اش را به OwnerDrawFixed تغییر بدید، ItemHeight اش رو تنظیم کنید و با رخداد DrawItem ظاهرش رو متحول کنید.
تغییر رسم ListBox خیلی ساده تر از اون چیزیه که به نظر میاد. حتی میتوانید بهش Hover اضافه کنید که ماوس با بردن روی گزینه ها ظاهر خاصی بهشون بده. شبیه منوی ویندوز 7
مشاهده پیوست 112500
یا می توانید گوشه گزینه انتخاب شده رو مثلث دار رسم کنید که انتخاب شدنش واضح تر باشه :
مشاهده پیوست 112501
ساختن اینها راحت تر از سر و کله زدن با کمپوننت هایی است که پروژه رو سنگین می کنند.

خیلی ممنون استاد علی
میخوام شخصی سازی کنم ولی از اونجایی هم که به کنترل های شخصی سازی شده ی دیگه (مثل کمبوباکس و لیست باکس و رادیوباتون و ...) نیاز دارم ، خیلی طول میکشه .
خود طراحی همین کنترلی که شبیه RadPageView باشه (توسط لیست باکس و کانتینر) ، یعنی کنترلی که هم شامل لیست باکس باشه (به عنوان قسمت Root Element در کنترل RadPageView عمل کنه) تا صفحه ی مورد نظر را انتخاب کنیم و هم کنترل کانتینر (مثل پنل به عنوان قسمت View Element درکنترل RadPageView عمل کنه) تا فقط همون صفحه را نشون بده ، با قابلیت شخصی سازی ، فکر کنم برام چند روز وقت ببره .
تازه فقط اگه همین کنترل بود ، مشکلی نداشت . دکمه های دیگه مثل چک باکس (برای تعیین رنگ قسمت باکس درون مربع و رنگ border اون مربع در چک باکس) ، رادیو باتون ، کمبوباکس و ... هم میخوام که قابلیت تعیین رنگ و ... هم داشته باشن . اگه بخوام هر کدوم از اینها را شخصی سازی کنم ، هر کدوم شون یکی تا دو روز یا بیشتر ، برام طول میکشه.
من بیشتر ، در سبک همون دومین کنترلی که گذاشتین (کلا تِم سیاه) را دوست دارم.
حالا یه کاریش میکنم . تهش اگه کمپوننت دیگه ای پیدا نشد ، از همین کمپوننت تلریک استفاده میکنم . درسته حجمش رو از 14 مگ به 34 مگ افزایش داد و هم اینکه کمپوننت اش پیچیده طراحی شد (و برای درک مخصوصا موقع آپدیت نسخه های بعدی ، خوب نیست) ولی باز به صرفه تر از اینه که خودم وقت بذارم و این همه کنترل ها را شخصی سازی کنم.

-----------------------------------------------

یه سئوال اینکه من بعد از اینکه این کمپوننت های جدید (DevExpress و syncfusion) را نصب کردم ، با اونکه توی این پروژه ام ازشون استفاده نکردم و الان هم حذف شون کردم ، وقتی وارد پروژه ام میشم و هیچ چیز را دست نمیزنم و تغییری نمیدم و (حتی بلافاصله) میخوام خارج بشم ، میگه شما فایل sln شو اغییر دادین ، میخواین ذخیره کنید؟
در حالی که در پروژه سولوشن های دیگه (که کلا فایل و همه چیزشون از این پروژه متفاوت و جداگانه هه) ، اصلا این اتفاق نمیافته.
نمیدونین دلیلش چیه؟
 
آخرین ویرایش:

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد علی ، یکی پیشنهاد داد که بخوام دردسر نکشم ، از wpf استفاده کنم .
هر چند من xml بلد نیستم (هر چند لازم هم نیست که با xml کار کنم و هم اینکه یه کم از پروژه مو طراحی کردم) ولی پیشنهادش مرا به این فکر انداخت که کنترل های wpf را توسط کنترل ElementHost در winform استفاده کنم. اینجوری چطوره؟ بهتر نیست به نظرتون؟
چون بدی wpf هم اینه که تعداد و وسعت کنترل هاش خیلی کمتر از winform هه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد علی ، کنترل های wpf مثل checkbox را بخوایم زمان mouse enter (یا mouse hover) یا mouse click ، رنگ داخل چک باکس شو (یعنی پروپرتی Background اش را) شخصی سازی کنیم (آخه پروپرتی Background فقط برای حالت استاندارد ، اون رو رسم میکنه . موقع mouse hover یا mouse click ، اون براش و رنگی که برای Background مشخص کردیم را دیگه نادیده میگیره) ، باید مثل کلاس های کنترل winform ، کلاسی بسازیم که از کلاس پدرشون (مثلا در اینجا همون CheckBox) ، ارث بری کنه و متد OnPaint شو شخصی سازی کنیم؟
یا روش آسون تری هست؟
اگه روش آسون تری داره ، اونو میگین؟
خیلی ممنون
 

the_king

مدیرکل انجمن
یه سئوال اینکه من بعد از اینکه این کمپوننت های جدید (DevExpress و syncfusion) را نصب کردم ، با اونکه توی این پروژه ام ازشون استفاده نکردم و الان هم حذف شون کردم ، وقتی وارد پروژه ام میشم و هیچ چیز را دست نمیزنم و تغییری نمیدم و (حتی بلافاصله) میخوام خارج بشم ، میگه شما فایل sln شو اغییر دادین ، میخواین ذخیره کنید؟
در حالی که در پروژه سولوشن های دیگه (که کلا فایل و همه چیزشون از این پروژه متفاوت و جداگانه هه) ، اصلا این اتفاق نمیافته.
نمیدونین دلیلش چیه؟
نمیدونم. لابد یک چیزی از بقایاش در csproj یا sln پروژه تون باقی مونده.

استاد علی ، یکی پیشنهاد داد که بخوام دردسر نکشم ، از wpf استفاده کنم .
هر چند من xml بلد نیستم (هر چند لازم هم نیست که با xml کار کنم و هم اینکه یه کم از پروژه مو طراحی کردم) ولی پیشنهادش مرا به این فکر انداخت که کنترل های wpf را توسط کنترل ElementHost در winform استفاده کنم. اینجوری چطوره؟ بهتر نیست به نظرتون؟
چون بدی wpf هم اینه که تعداد و وسعت کنترل هاش خیلی کمتر از winform هه.
یک مشکل اساسی که با استدلال هاتون دارم اینه که به نظرتون یکی دو روز وقت صرف کردن برای ساختن یک کمپوننت وقت زیاده.
شما از WPF که استفاده کنید دردسر تون چند برابر میشه، چون اولا عادت به طراحی ویژوال فرم های ویندوز دارید، در حالی که بیشتر طراحی در WPF رو باید در قالب XAML تایپ کنید، نه اینکه بصورت ویژوال با Drag کردن بسازید. ثانیا چون کلا WPF براتون محیط جدید و ناآشنایی است زمان میبره تا بهش عادت کنید. اون کسی که بهتون WPF رو پیشنهاد کرده نظر بدی نداده ولی مطلع نیست که شما دو روز براتون زمان زیاده و حوصله ماه ها وقت صرف کردن برای این موارد ناشناخته رو ندارید.

استاد علی ، کنترل های wpf مثل checkbox را بخوایم زمان mouse enter (یا mouse hover) یا mouse click ، رنگ داخل چک باکس شو (یعنی پروپرتی Background اش را) شخصی سازی کنیم (آخه پروپرتی Background فقط برای حالت استاندارد ، اون رو رسم میکنه . موقع mouse hover یا mouse click ، اون براش و رنگی که برای Background مشخص کردیم را دیگه نادیده میگیره) ، باید مثل کلاس های کنترل winform ، کلاسی بسازیم که از کلاس پدرشون (مثلا در اینجا همون CheckBox) ، ارث بری کنه و متد OnPaint شو شخصی سازی کنیم؟
یا روش آسون تری هست؟
اگه روش آسون تری داره ، اونو میگین؟
خیلی ممنون
بعضی کار هاتون خیلی عجیبه. محیطی که باهاش آشنا هستید و روال اش رو میدونید ول میکنید چون میگید دو روز طول میکشه که تا انجامش بدم، بعد سر کاری که نمیدونید روالش چیه راحت روز ها وقت صرف می کنید.
شخصی سازی WPF ها وقتی براتون راحت میشه که برای یادگیری کار با XAML وقت صرف کنید و بهش عادت کنید وگرنه به قول شما آسون نیست.
 

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

بالا