1 ضمیمه
تغییر موقعیت دکمه ها به صورت رندوم
سلام دوستان من یک ماشین حساب دارم میخوام وقتی برنامه باز میشه موقعیت دکمه ها تغییر کنه
بهترین مثال کیبورد امنیتی بانک ها هنگام پرداخت آنلاین میباشد که با هر بار باز شدن صفحه موقعیت دکمه ها تغییر میکنه
https://epayment.bmi.ir/MoneyTransfer
من میخوام دکمه های ماشین حساب اون هم فقط عدد ها جا به جا بشن
ضمیمه 130987
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
سلام
علی الحساب، به نظر من باید تکست دکمه ها رو به صورت رندم تغییر بدید و موقع محاسبه هم خاصیت تکست دکمه رو بخونید و ازش استفاده کنید. روی این موضوع فکر کنید تا ببینیم چه راه حلی واسش پیدا میشه.
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
به نظر شما اگر موقعیت عوض بشه بهتر نیست یعنی راحت تر نیست ؟
چون اگر قرار باشه تکس دکمه ها عوض بشه کد های زیادی باید عوض و جا به جا بشن
button1.Location = new Point(52, 198);
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
سلام
یه کلاس درست کنید و این کدها رو قرار بدین :
public void moveCtrl(Control Control1, Control Control2) {
int xC1 = Control1.Location.X;
int yC1 = Control1.Location.Y;
int xC2 = Control2.Location.X;
int yC2 = Control2.Location.Y;
Control1.Location = new System.Drawing.Point(xC2, yC2);
Control2.Location = new System.Drawing.Point(xC1, yC1);
}
قراره جای باتون ها با هر بار لود شدن فرم عوض بشه (با باتون هایی که بعدا معرفی می کنید)
و توی رویداد لود_فرم :
Button[] c = {button1, button2, button3, button4, button5}; Random rn = new Random();
int rnd = rn.Next(0, c.Length);
xc.moveCtrl(button1, c[rnd]);
خط اول میگه که کدوم دکمه ها باید جا بجا بشن ...
و تو خط آخر میگه کدوم با بقیه جابجا بشه ! که می تونی تعدادش رو مث خط اول بیشتر از یه باتون کنی (تو این حالت فقط باتون1 جاش با یکی از اون چند تا عوض میشه)
البته کدها رو بعد از فراخوانی کلاس کدهای بالا رو بنویسید ... مثل فراخوانی یه فرم :
Class1 c1 = new Class1
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
خب، اول یه کلاس داریم که یه Extension هست برای List ، این یه الگوریتم نامرتب سازی (shuffle به طور عامیانه میشه بُر زدن که توی ورق بازی استفاده میشه) یک مجموعه هست. پس کدهای زیر رو توی یه کلاس یا آخر کدهای فرمتون بنویسید:
static class MyExtensions
{
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
بعد ده تا دکمه برای اعداد 0 تا 9 روی فرم قرار بدید و Name اونها رو از btn0 تا btn9 قرار بدید و در آخر در لود فرم یا در یک دکمه کدهای زیر رو بنویسید:
List<Button> lst = new List<Button>();
lst.Add(btn0);
lst.Add(btn1);
lst.Add(btn2);
lst.Add(btn3);
lst.Add(btn4);
lst.Add(btn5);
lst.Add(btn6);
lst.Add(btn7);
lst.Add(btn8);
lst.Add(btn9);
lst.Shuffle();
int _number = 0;
foreach (Button btn in lst)
{
btn.Text = _number.ToString();
_number++;
}
روش کار هم به این صورته که اول دکمه ها رو در یک لیست قرار میدیم بعد لیست رو به هم می زنیم تا ترتیبش از دست بره بعد اعداد 0 تا 9 رو به لیست به هم ریخته اختصاص میدیم. حالا می تونید از خاصیت Text باتن ها استفاده کنید.
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
الان کد شما کاملا درست عمل میکنه خیلی هم عالی هست ولی فقط Text دکمه ها رو تغییر میده
مثلا الان وقتی روی دکمه 3 کلیک میکنم 6 میزنه من نمیخوام کد های اصلی من بهم بخوره
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
شما مثلاً برای دکمه 3 چه کدی نوشتید؟
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
نقل قول:
نوشته شده توسط
Mahmoud Zaad
شما مثلاً برای دکمه 3 چه کدی نوشتید؟
textBox1.Text += "3";
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
نقل قول:
نوشته شده توسط
mohammad2407
خب عرض کردم شما به جای اون "3" بنویسید btn3.Text برای بقیه دکمه ها هم همین کار رو بکنید. به جای "0" در دکمه 0 بنویسید btn0.Text و ...
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
نقل قول: تغییر موقعیت دکمه ها به صورت رندوم
میشه یه آرایه 10 عنصری از نوع اینت داشت و مقادیر تصادفی 0 تا 9 را دورنش گذاشت! حالا خونه صفرم (که یک عددیست از 0 تا 9 )را به دکمه صفر انتساب بدین! بقیه هم بهمین ترتیب...