View Full Version : مشكل در كار كردن با Radio-button
amin-z
چهارشنبه 15 مهر 1388, 10:02 صبح
سلام
در يك برنامه كه در آن Radio-button به كار برده شده ، موقع كار با Radio-button در برنامه خطاي زمان اجرا مي دهد .
برنامه را در ضميمه گذاشته ام.
DLL_DLL
پنج شنبه 16 مهر 1388, 01:06 صبح
با چیش نمیتونی کا کنی ؟؟
کجاش ارور داره ؟
amin-z
پنج شنبه 16 مهر 1388, 09:16 صبح
سلام
در فايل ضميمه يك مثال كوچك با از استفاده متد زير نوشته ام ...
radiob1.SetCheck(1);
ولي موقع استفاده از متد بالا يك ارور زمان اجرا مي دهد .
در اين قسمت ارور زمان اجرا داره ، اين كد در فايل afxwin2.inl است كه در آدرس VC\atlmfc\include قرار دارد :
_AFXWIN_INLINE void CButton::SetCheck(int nCheck)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0); }
DLL_DLL
پنج شنبه 16 مهر 1388, 11:15 صبح
به این صورت تغییرش بده ببین درست میشه ؟
radiob1->SetCheck(true);
Nima_NF
پنج شنبه 16 مهر 1388, 14:55 عصر
شما قبل از نوشتن کوچکترین برنامه، باید مطالب اولیه برنامه نویسی با MFC را بدانید که برای همه کنترل ها یکسان هستند.
وقتی کنترلی می سازید، باید آن را توسط variable wizard به متغیر اختصاص دهید و توسط آن کنترل را تغییر دهید یا از آن بخوانید. (برای radio button از یک متغیر int می توانید استفاده کنید، یا با زدن تیک control varible از کلاس CButton یک شئی بسازید)
َشما نباید خودتان دستی یک متغیر بسازید، بلکه باید از Add variable استفاده کنید تا در DoDataExchange کد مورد نظر نوشته شود و آن را به radio button شما متصل کند.
در FAQ بخش تاپیک براتی توضیحات در مورد Add variable وجود دارد.
amin-z
پنج شنبه 16 مهر 1388, 16:45 عصر
سلام ، از توجهتون ممنونم
__________________________________________________ __________________
Nima_NF :
وقتی کنترلی می سازید، باید آن را توسط variable wizard به متغیر اختصاص دهید و توسط آن کنترل را تغییر دهید یا از آن بخوانید. (برای radio button از یک متغیر int می توانید استفاده کنید، یا با زدن تیک control varible از کلاس CButton یک شئی بسازید)
__________________________________________________ __________________
من براي radio button با استفاده از Add variable يك متغيربه نام radiob1 ساخته بودم
public:
CButton radiob1;
با اين حال ارور زمان اجرا مي دهد.
در ضمن اين روش هم كه DLL_DLL گفتند جواب نداد و دو ارور ديگر ايجاد شد :
Error 1 error C2819: type 'CButton' does not have an overloaded member 'operator ->'
Error 2 error C2232: '->CButton::SetCheck' : left operand has 'class' type, use
Nima_NF
پنج شنبه 16 مهر 1388, 22:46 عصر
اگر با variable wizard این کار را کرده باشید پس باید ID کنترل radio-button شما در تابع DoDataExchange اضافه شده باشد که این طوری نیست و فقط شما دستی یک متغیر با نام CButton ساخته اید (یا حالا اشتباها با wizard چینین کاری کرده اید)، بلکه باید در wizard نوع را control تعیین کنید نه اینکه اسم برایش انتخاب کنید. تا کدها خودکار در کلاس دیالوگ تولید شود.
تا زمانی که این کار را انجام نداده باشید شما فقط یک شئی خالی از کلاس CButton ساخته اید و به کنترلی هم متصل نیست و همیشه خطا دریافت خواهید کرد.
amin-z
سه شنبه 21 مهر 1388, 10:21 صبح
سلام Nima_NF
من دوباره برنامه مورد نظر را از اول نوشتم ، موقع تعريف متغيير در variable wizard نوع control را تعيين كردم و ID کنترل radio-button در تابع DoDataExchange اضافه شد :
void CrbDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTON1, radiob1);
DDX_Control(pDX, IDC_BUTTON1, radiob2);
}
با اين حال يك ارور زمان اجرا ميدهد.:ناراحت:
لطفا خودتون برنامه را در ضميمه ببينيد كه مشكل كجاست ...
باتشكر
Nima_NF
چهارشنبه 22 مهر 1388, 16:57 عصر
radio button ها در بخش properties یک خواص به نام Auto دارند که true هست. اگر قرار هست که خودتان با تابع آن ها را کنترل کنید و یک متغیر از نوع control Cbutton به آن اختصاص دهید، قبل از باز کردن پنجره add variable ، ابتدا radio button را انتخاب کنید و خاصیت auto را false کنید.
سپس در پنجره add variable در بخش ID باید ID-RADIO1 یا مشابه آن را ببینید. در غیر این صورت (همان طوری که در عکس هم مشخص هست) فقط ID های button ها را می بینید و اشتباها برای آن ها یک Cbutton می سازید. (برای روشن شدن موضوع به عکس ضمیمه شده خود نگاه کنید که ID control اشتباها IDC_BUTTON1 هست).
ضمنا توجه کنید که کار را برای خود سخت نکنید و radio buton ها را با توابع کنترل نکنید.
MFC کار را برای شما راحت کرده و قابلیت auto را قرار داده است، یعنی فقط کافیست که یک متغیر از نوع int به اولین radio button در پنجره تخصیص دهید، سپس هر گاه این int را 0 قرار دهید اولین radio انتخاب می شود، اگر 1 دومین و ...، دریافت هم به همین شکل از Int بخوانید. (اولین radio حالت group باید داشته باشد در قسمت خواص)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.