PDA

View Full Version : سوال: دلیل عمل نکردن دستور if در این کد چیست؟



manager_mrd
پنج شنبه 26 فروردین 1389, 09:04 صبح
من دو تا فرم دارم : تو فرم اول يه textbox و يه lable دارم كه هر كس ميخواد وارد شه رمزش رو تو تكست باكس وارد ميكنه و سمت فرد تو ليبل نشون داده ميشه و سپس فرم دوم باز ميشه حالا ميخوام با توجه به سمت افراد menustrip اي كه تو فرم دوم دارم فعال يا غير فعال بشه كه اين كارو با دستور if تو button فرم اول انجام دادم ولي كار نميكنه

if (lable1.text="manager")
menustrip.enable=true
elae menustrip.enalble=false
لطفا بگيد كه كد رو بايد كجا بنويسم چون هر جا نوشتم فايده نداره
ممنون

s.Jabbari
پنج شنبه 26 فروردین 1389, 10:37 صبح
برای مقایسه از 2 تا == استفاده میشه!!

اَرژنگ
پنج شنبه 26 فروردین 1389, 11:16 صبح
من دو تا فرم دارم : تو فرم اول يه textbox و يه lable دارم كه هر كس ميخواد وارد شه رمزش رو تو تكست باكس وارد ميكنه و سمت فرد تو ليبل نشون داده ميشه و سپس فرم دوم باز ميشه حالا ميخوام با توجه به سمت افراد menustrip اي كه تو فرم دوم دارم فعال يا غير فعال بشه كه اين كارو با دستور if تو button فرم اول انجام دادم ولي كار نميكنه

if (lable1.text="manager")
menustrip.enable=true
elae menustrip.enalble=false
لطفا بگيد كه كد رو بايد كجا بنويسم چون هر جا نوشتم فايده نداره
ممنون
۱.اولین اشتباه مقایسه کردن رشته‌هاست، کدهایی که بناشان بر مقایسه کردن رشته‌هاست باید آشغال حسابشان کرد. تا جایی که میتونید از اینکه کدتان بر مقایسه کرد رشته باشد بر حذر باشید.
۲. حتی اگر فرض کنیم که واقعاً مجبورید که بنا بر مقایسه رشته کار کنید (با اینکه اینگونه کدها مفت هم نمیارزند)، از String.Compare استفاده کنید ، وگرنه Manager != manager
اولین نشان اینکه دارید به کد یک نفر ناشی نگاه میکنید استفاده زیاد از if و رشته‌ها برایه کنترل کردن انجام عملیات است.

sky_in_iran
پنج شنبه 26 فروردین 1389, 11:17 صبح
سلام دوست عزيز
همونجور كه دوستمون گفت براي تساوي بايد از == استفاده كني و همچنين ; يادت نره از اينم ميتوني استفاده كني




label1.Text.Equals("manager");

manager_mrd
پنج شنبه 26 فروردین 1389, 14:03 عصر
سلام دوست عزيز
همونجور كه دوستمون گفت براي تساوي بايد از == استفاده كني و همچنين ; يادت نره از اينم ميتوني استفاده كني



label1.Text.Equals("manager");

با تشكر از جوابتون اگه بخوام غير از اين راه از راه بهتري استفاده كنيم چه راهي رو پيشنهاد مي كنيد كه تشخيص بده مدير وارد شده و يكسري اشيا غير فعال بشن ؟؟؟ ممنون

اَرژنگ
پنج شنبه 26 فروردین 1389, 14:28 عصر
با تشكر از جوابتون اگه بخوام غير از اين راه از راه بهتري استفاده كنيم چه راهي رو پيشنهاد مي كنيد كه تشخيص بده مدير وارد شده و يكسري اشيا غير فعال بشن ؟؟؟ ممنون
روش اصولی مشکل واقعیتان ربطی به مقایسه رشته‌ها ندارد،
دو روش اصولی وجود دارد (تا جایی که من میدانم):
۱. استفاده از خود Authentication و Authrization که بوسیله لگین در ویندوز وجود دارد، برایه مطالعه به قسمت Application Security در کتاب
Net Framwork 2.0 Application Development Foundation.
یا همان کتاب برایه دات نت ۳.۵ و یا ۴.۰ (اگر موجود باشد).
روشهایه دیگر استفاده از Roles در خود Active Directory, به این شکل security برنامه از یک جایه مرکزی قابل مدیریت میشه.
استفاده از Membership and Proflies Provider.
ولی اگر از هیچ کدام از روشهایه بالا نمیتوانید استفاده کنید، به جایه اینکه روشتان را به مختصات کنترلها در فرمها بنا کنید، در یک جایه مرکزی مانند Application.Config و یا در یک کلاس متخصص به اینکه کی لگین کرده جمع‌آوری کنید. به جایه استفاده رشته از enum استفاده کنید. این روش در کارهایه حرفه‌ای استفاده نمیشه و حالت واقعی ندارد ولی از سر پروژه‌هایه دانشگاه ‌هم معمولاً زیادیه :چشمک:.

Himalaya
پنج شنبه 26 فروردین 1389, 20:04 عصر
1.اولین اشتباه مقایسه کردن رشته‌هاست، کدهایی که بناشان بر مقایسه کردن رشته‌هاست باید آشغال حسابشان کرد. تا جایی که میتونید از اینکه کدتان بر مقایسه کرد رشته باشد بر حذر باشید.
۲. حتی اگر فرض کنیم که واقعاً مجبورید که بنا بر مقایسه رشته کار کنید (با اینکه اینگونه کدها مفت هم نمیارزند)، از String.Compare استفاده کنید ، وگرنه Manager != manager
اولین نشان اینکه دارید به کد یک نفر ناشی نگاه میکنید استفاده زیاد از if و رشته‌ها برایه کنترل کردن انجام عملیات است.




publicstaticbool IsValidLogin( string login , string password)
{
//Login as always case insensitive
int LoginMatch = String.Compare(login, "LoGiN", true, CultureInfo.CurrentCulture);
int PasswordMatch = String.Compare(password, "password", false, CultureInfo.CurrentCulture);
if (Math.Abs(LoginMatch) + Math.Abs(PasswordMatch) == 0)
returntrue;
elsereturnfalse;
}


آرژنگ جان سلام. مچتو گرفتم:لبخند:
این یه قسمت از کدیه که چند ماه پیش واسه کنترل user و pass دادی...
اسم برنامت هم این بود LoginFormExample
چرا خودت از مقایسه رشته ها استفاده کردی (برخلاف قسمت 1 هستش که گفتی، همونی که قرمزش کردم).... چون تو این مورد چاره نداشتی (بالاخره اون چیزی که تو تکست باکس وارد میشه باید با یه چیز مقایسه بشه دیگه...از خودت دفاع کن :لبخند:

FastCode
پنج شنبه 26 فروردین 1389, 20:17 عصر
publicstaticbool IsValidLogin( string login , string password)
{
//Login as always case insensitive
int LoginMatch = String.Compare(login, "LoGiN", true, CultureInfo.CurrentCulture);
int PasswordMatch = String.Compare(password, "password", false, CultureInfo.CurrentCulture);
if (Math.Abs(LoginMatch) + Math.Abs(PasswordMatch) == 0)
returntrue;
elsereturnfalse;
}


آرژنگ جان سلام. مچتو گرفتم:لبخند:
این یه قسمت از کدیه که چند ماه پیش واسه کنترل user و pass دادی...
اسم برنامت هم این بود LoginFormExample
چرا خودت از مقایسه رشته ها استفاده کردی (برخلاف قسمت 1 هستش که گفتی، همونی که قرمزش کردم).... چون تو این مورد چاره نداشتی (بالاخره اون چیزی که تو تکست باکس وارد میشه باید با یه چیز مقایسه بشه دیگه...از خودت دفاع کن :لبخند:

کدی که گزاشتید خیلی بهتر از مقایسه دو تا رشتست.

اَرژنگ
پنج شنبه 26 فروردین 1389, 20:34 عصر
publicstaticbool IsValidLogin( string login , string password)
{
//Login as always case insensitive
int LoginMatch = String.Compare(login, "LoGiN", true, CultureInfo.CurrentCulture);
int PasswordMatch = String.Compare(password, "password", false, CultureInfo.CurrentCulture);
if (Math.Abs(LoginMatch) + Math.Abs(PasswordMatch) == 0)
returntrue;
elsereturnfalse;
}


آرژنگ جان سلام. مچتو گرفتم:لبخند:
این یه قسمت از کدیه که چند ماه پیش واسه کنترل user و pass دادی...
اسم برنامت هم این بود LoginFormExample
چرا خودت از مقایسه رشته ها استفاده کردی (برخلاف قسمت 1 هستش که گفتی، همونی که قرمزش کردم).... چون تو این مورد چاره نداشتی (بالاخره اون چیزی که تو تکست باکس وارد میشه باید با یه چیز مقایسه بشه دیگه...از خودت دفاع کن :لبخند:

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

zmmehrdad
جمعه 27 فروردین 1389, 01:32 صبح
حالا صرف نظر از درست یا غلط بودن روش اون دوستمون گفت که label1 تو فرم اول و menustrip تو فرم دوم چطور به هر دوش تو یه کلاس بدون اشاره به شی کلاس دسترسی پیدا می کنه مثلا نگفته form1.label1 یا form2.menustrip بعید می دونم این دوتا رو static هم تعریف کرده باشه بنابراین اشکالش خیلی ساده تر از این حرفاست فکر کنم اصلا کدش کامپایل هم نشه

اَرژنگ
جمعه 27 فروردین 1389, 04:47 صبح
حالا صرف نظر از درست یا غلط بودن روش اون دوستمون گفت که label1 تو فرم اول و menustrip تو فرم دوم چطور به هر دوش تو یه کلاس بدون اشاره به شی کلاس دسترسی پیدا می کنه مثلا نگفته form1.label1 یا form2.menustrip بعید می دونم این دوتا رو static هم تعریف کرده باشه بنابراین اشکالش خیلی ساده تر از این حرفاست فکر کنم اصلا کدش کامپایل هم نشه

پروژه رو بفرسته کمکش کنیم، آخه بدونه کد در مورد مشکلشان حرف زدن میشه مانند درس الاهیات ، همه چی میشه گفت :)

اَرژنگ
یک شنبه 29 فروردین 1389, 10:50 صبح
publicstaticbool IsValidLogin( string login , string password)
{
//Login as always case insensitive
int LoginMatch = String.Compare(login, "LoGiN", true, CultureInfo.CurrentCulture);
int PasswordMatch = String.Compare(password, "password", false, CultureInfo.CurrentCulture);
if (Math.Abs(LoginMatch) + Math.Abs(PasswordMatch) == 0)
returntrue;
elsereturnfalse;
}


آرژنگ جان سلام. مچتو گرفتم:لبخند:
این یه قسمت از کدیه که چند ماه پیش واسه کنترل user و pass دادی...
اسم برنامت هم این بود LoginFormExample
چرا خودت از مقایسه رشته ها استفاده کردی (برخلاف قسمت 1 هستش که گفتی، همونی که قرمزش کردم).... چون تو این مورد چاره نداشتی (بالاخره اون چیزی که تو تکست باکس وارد میشه باید با یه چیز مقایسه بشه دیگه...از خودت دفاع کن :لبخند:


دلیل مقایسه رشته‌ها در اون مثال بخصوص برایه اینه که اصل کاری چک کردن رشته‌هاست، برایه اینکه درست بودن پسورد اراعه داده شده.
ولی چیزی را کد در مورد استفاده نکتدن رشته‌ها است را حالا میتونم دقیقتر بگم:
از مقایسه کردن رشته‌ها برایه تعیین کار کد باید خودداری کرد، در مثالی که فرستاده شده بود تعیین کار کد با مقایسه با رشته‌ها نبود ، بلکه کد برایه مقایسه رشته‌ها بود ، و بنابر نتیجه مقایسه کد ادامه پیدا میکنه.
جایی که مقایسه از رشته‌ها لازم نیست نباید به مقایسه از رشته‌ها متوصل شد، در موردی که به نظر آوردید به جز مقایسه رشته‌ها روش دیگری نمیشه استفاده کرد.
ولی اشکال اصلی اون مثال ، به استفاده از فرم لگین برنمیگرده، چونکه در برنامه‌نویسی ویندوز از Windows Authetication استفاده میشه. در اصل نباید زمانی که احتیاج نیست فرمهایه لگین اصلاً استفاده بشه.