ورود

View Full Version : فراخوانی دستورات از تکست باکس یا ...



Behrouz3363
شنبه 12 بهمن 1398, 14:32 عصر
سلام بر برنامه نویسان عزیز
من میخوام یه قفل نرم افزاری خاص بسازم در صورت امکان راهنمایی بفرمایید .
آیا امکان فراخوانی دستورات از تکست باکس وجود داره ؟ یعنی بفرض من بجای اینکه بنویسم Form1.show بنویسم Form1.Text1.text
و متن درون Text مساوی show. باشه ?
لطفا راهنمایی بفرمایید .

the king
شنبه 12 بهمن 1398, 15:19 عصر
سلام بر برنامه نویسان عزیز
من میخوام یه قفل نرم افزاری خاص بسازم در صورت امکان راهنمایی بفرمایید .
آیا امکان فراخوانی دستورات از تکست باکس وجود داره ؟ یعنی بفرض من بجای اینکه بنویسم Form1.show بنویسم Form1.Text1.text
و متن درون Text مساوی show. باشه ?
لطفا راهنمایی بفرمایید .
شاید فکر کنید اینطوری دارید امنیت رو بیشتر می کنید ولی در نظر بگیرید که هر چقدر اجزاء خارجی (کتابخانه ها، کمپوننت ها، فایل ها) دخیل در ماجرا رو بیشتر کنید احتمال لو رفتن روتین تون بیشتر میشه.
یکی از روش های اجرای کد پویای ویژوال بیسیک، استفاده از Script Control ئه. در منوی Project ویژوال بیسیک با گزینه Components (ترکیب کلیدی Ctrl + T) کمپوننت Microsoft Script Control رو پیدا کنید و تیک بزنید و OK کنید.
کمپوننت اش به Toolbox اضافه میشه، از داخل Toolbox (از همونجا که TextBox و CommandButton رو برمیدارید) یک نمونه اش رو روی فرم برنامه تون قرار بدید که اسم پیشفرض اش ScriptControl1 میشه.
حالا اول اون اشیاء ای که در دستورهاتون لازم میشن رو برایش تعریف کنید، مثلا :

ScriptControl1.AddObject Form2.Name, Form2

این سطر بالا میگه ما شیء Form2 رو با نام "Form2" در اون ScriptControl1 معرفی کردیم. حالا ScriptControl1 در هر فرمانی که اجرا کنه، میدونه که معنی عبارت "Form2" چیه و به Form2 اشاره می کنه.

بعد می توانید دستوری رو اجرا کنید، مثلا :

ScriptControl1.ExecuteStatement Text1.Text


دقت کنید که ScriptControl1 مستقل از برنامه شما است، مثلا اگه قبلا با AddObject بهش Command1 رو معرفی نکنید، نمیدونه Command1 چه معنی ای داره و اگر در دستورتون اسمی از Command1 برده بشه، به عنوان یک عبارت ناشناخته شناسایی اش می کنه :

ScriptControl1.AddObject Comman1.Name, Command1

Behrouz3363
یک شنبه 13 بهمن 1398, 11:54 صبح
شاید فکر کنید اینطوری دارید امنیت رو بیشتر می کنید ولی در نظر بگیرید که هر چقدر اجزاء خارجی (کتابخانه ها، کمپوننت ها، فایل ها) دخیل در ماجرا رو بیشتر کنید احتمال لو رفتن روتین تون بیشتر میشه.
یکی از روش های اجرای کد پویای ویژوال بیسیک، استفاده از Script Control ئه. در منوی Project ویژوال بیسیک با گزینه Components (ترکیب کلیدی Ctrl + T) کمپوننت Microsoft Script Control رو پیدا کنید و تیک بزنید و OK کنید.
کمپوننت اش به Toolbox اضافه میشه، از داخل Toolbox (از همونجا که TextBox و CommandButton رو برمیدارید) یک نمونه اش رو روی فرم برنامه تون قرار بدید که اسم پیشفرض اش ScriptControl1 میشه.
حالا اول اون اشیاء ای که در دستورهاتون لازم میشن رو برایش تعریف کنید، مثلا :

ScriptControl1.AddObject Form2.Name, Form2

این سطر بالا میگه ما شیء Form2 رو با نام "Form2" در اون ScriptControl1 معرفی کردیم. حالا ScriptControl1 در هر فرمانی که اجرا کنه، میدونه که معنی عبارت "Form2" چیه و به Form2 اشاره می کنه.

بعد می توانید دستوری رو اجرا کنید، مثلا :

ScriptControl1.ExecuteStatement Text1.Text


دقت کنید که ScriptControl1 مستقل از برنامه شما است، مثلا اگه قبلا با AddObject بهش Command1 رو معرفی نکنید، نمیدونه Command1 چه معنی ای داره و اگر در دستورتون اسمی از Command1 برده بشه، به عنوان یک عبارت ناشناخته شناسایی اش می کنه :

ScriptControl1.AddObject Comman1.Name, Command1

ممنونم از راهنمایی کاملتون . اما خیلی برام سنگین بود یعنی من باید برای نمایش فرم دوم در قسمت کدنویسی ScriptControl1 برای اینکه فرم 2 نمایش داده بشه اول باید کد ScriptControl1.AddObject Form2.Name, Form2 معرفی کنم بعد در Command1 بنویسم ScriptControl1.ExecuteStatement Text1.Text که متن درون Text1 برابر با Form2.show هست ؟

the king
یک شنبه 13 بهمن 1398, 12:56 عصر
ممنونم از راهنمایی کاملتون . اما خیلی برام سنگین بود یعنی من باید برای نمایش فرم دوم در قسمت کدنویسی ScriptControl1 برای اینکه فرم 2 نمایش داده بشه اول باید کد ScriptControl1.AddObject Form2.Name, Form2 معرفی کنم بعد در Command1 بنویسم ScriptControl1.ExecuteStatement Text1.Text که متن درون Text1 برابر با Form2.show هست ؟
بله. البته فقط یکبار Form2 رو تعریف می کنید. ممکنه صد بار هم بهش دستوراتی بدید که اجرا کنه، ولی Form2 رو همون یکبار قبل از اینکه دستوری رو بهش بدید تعریف می کنید و دیگه بعد از اون میدونه Form2 یعنی چی.
وقتی دستور Form2.Show رو اجرا می کنید، میگرده در دستورات ویژوال بیسیک و می بینه چیزی به نام Form2 تعریف نشده و نمیشناسه. برای همین می توانید همون اول کار که فرم تون باز شده و قبل از اینکه دستوری رو اجرا کنید، Form2 رو برای ScriptControl1 تعریف کنید تا اگر در دستوری اسمی از Form2 اومد بدونه منظور کدوم شیء ئه.

Behrouz3363
چهارشنبه 16 بهمن 1398, 13:59 عصر
بله. البته فقط یکبار Form2 رو تعریف می کنید. ممکنه صد بار هم بهش دستوراتی بدید که اجرا کنه، ولی Form2 رو همون یکبار قبل از اینکه دستوری رو بهش بدید تعریف می کنید و دیگه بعد از اون میدونه Form2 یعنی چی.
وقتی دستور Form2.Show رو اجرا می کنید، میگرده در دستورات ویژوال بیسیک و می بینه چیزی به نام Form2 تعریف نشده و نمیشناسه. برای همین می توانید همون اول کار که فرم تون باز شده و قبل از اینکه دستوری رو اجرا کنید، Form2 رو برای ScriptControl1 تعریف کنید تا اگر در دستوری اسمی از Form2 اومد بدونه منظور کدوم شیء ئه.
هرکار میکنم پیام خطا میده و اجرا نمیشه میشه لطفا کد ها رو برام بفرستید؟