الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤالين DataGrid & Copy& Paste

مغلق
بدأه huss22us في 9 أكتوبر 2006 · 4 رد · 775 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

أولا: كل عام و أنتم بخير

ثانيا: لى سؤالين

1- أقوم بعمل برنامج و أضع بيانات فى GridView المشكلة أن البرنامج يأخذ وقت طويل و ال Grid اظهر بها البيانات و لكن لا يستطيع المستخدم إستخدامها أو إستخدام ال Scroll -- أثناء عمل البرنامج -- أتوقع أن الحل عن طريق threads و لكنى لا أعرف كيف ؟؟

2- برنامج أخر يشبه إلى حد ما ال VS و يقوم المستخدم بعمل Forms & Buttons وكل ده فى ال Run Time -- المهم أنا عايز المستخدم يقدر يعمل copy & paste لل buttons ده

وشكرا

سلام

اللهم إنك عالم بحالى وغنى عن سؤالى فأهدنى وأصلح لى بالى

#3

ألسلام عليكم

جزاك الله خيرا

أبحث الأن عن إجابة السؤال الثاى -- هل من مجيب

اللهم إنك عالم بحالى وغنى عن سؤالى فأهدنى وأصلح لى بالى

#4

السؤال الثاني يصعب الاجابه عليه لأننا لا نعرف تماما طبيعة البرنامج الذي تصنعه. فالأمور ممكن أن تختلف كليا.

على كل أنا فكرت في طريقه على السريع ولكنها تحتاج الى تعديل كثير.

كتبت كلاس ينسخ المعلومات المفيده لـ Button ما. ويرجع Button جديد به نفس المعلومات.

public class MyStrangeClass
{
string text,name;
int height, width;

public MyStrangeClass(Button btn)
{
text = btn.Text;
height = btn.Height;
width = btn.Width;
name = btn.Name;
}

public Button GetButton(Point location,KeyEventHandler eHandler)
{
Button btnToReturn = new Button();
btnToReturn.Text = text;
btnToReturn.Name = name;
btnToReturn.Width = width;
btnToReturn.Height = height;
btnToReturn.Location = location;
btnToReturn.KeyDown += eHandler;
return btnToReturn;
}

}

الـ Constructor يحصل على Button ويسجل المعلومات المفيده ( المعلومات التي أراها مفيده هي الـ Width والـ Text و الـ Height وربما الـ Name ! ). وبه GetButton تستقبل KeyEventHandler يشير على داله يتم تنفيذها عندما يضغط أحدهم بالـ KeyBoard على هذا الـ Button الراجع من هذه الداله. وستقبل أيضا Location الذي تريده للـ Button الجديد ( المنسوخ ).

في الـ Form الأساسيه اعمل أول حاجه Handler لأحداث الـ KeyDown الخاصه بكل الـ Buttons التي سيتم وضعها على الفورم.

KeyEventHandler copyAndSoOnEventHandler;

وأيضا اعمل أوبكجت من StrangeClass

MyStrangeClass veryStrange;

وفي الـ Load مثلا اكتب :

void YourFormLoad(object sender, EventArgs e)
{
copyAndSoOnEventHandler = new KeyEventHandler(ButtonsKeyDown);
foreach(Control x in Controls)
if(x is Button)
x.KeyDown+=copyAndSoOnEventHandler;
}

هنا في الـ Load جعلت copyAndSoOnEventHandler يشير الى داله سنكتبها لاحقا اسمها ButtonsKeyDown. وعملت foreach على الـ Buttons الموجوده في الـ Form لكي أجعل الداله ButtonsKeyDown يتم تنفيذها اذا حدث الـ KeyDown لأي زر ( احذف بعد ذلك كود foreach فهو للتجربه فقط ). وعندما يضيف أي شخص Button على الـ Form يجب عليك أن تسند copyAndSoOnEventHandler للـ KeyDown الخاص به أيضا لكي يدعم عملية Copy-Paste.

هذه هي ButtonsKeyDown :

void ButtonsKeyDown(object sender, KeyEventArgs e)
{
if( e.KeyData == (Keys.C | Keys.Control) )
veryStrange = new MyStrangeClass((Button)sender);
}

وهنا أختبر اذا كان المستخدم قد ضغط Ctrl+C أم لا واذا فعل أقوم باعادة Instantiate الـ veryStrange Object. وأمرر للـ Constructor الـ Button الذي فجر الحدث. وبالتالي المعلومات التي أراها تهمنا الآن حول الـ Button , السابق ذكرها , موجوده في veryStrange الآن. لا يبقى لنا شئ سوى أن نكتب الكود بتاع Ctrl+V :

في الداله التي تتعامل مع حدث الـ KeyDown الخاصه بالـ Form اكتب هذا :

private void YourForm_KeyDown(object sender, KeyEventArgs e)
{
if(veryStrange!=null)
if( e.KeyData == (Keys.V | Keys.Control) )
this.Controls.Add(veryStrange.GetButton(PointToClient(MousePosition),copyAndSoOnEventHandler));
}

هنا في هذا الحدث اختبرت الأزار المضغوطه وان وجدتها Ctrl+V ووجدت veryStrange ليس بـ null ( أي أن المستخدم قد ضغط Ctrl+C في السابق ) أقوم باستدعاء GetButton وأمرر لها الـ Location ( مررت لها المكان الموجود فيه المؤشر في اللحظه التي ضغط فيها على Ctrl+V بالنسبه للـ Form الحاويه له ( this ) ) وأمرر لها أيضا copyAndSoOnEventHandler لكي يدعم هذا الـ Button المنسوخ الـ Copy-Paste مثل اخوانه الذين سبقوه. وبعد أن يرجع لي Button أضيفه في الـ Controls Collection.

ويمكن أن تجعل دالة ButtonsKeyDown تنفذ لكل أحداث الـ KeyDown الخاصه بأي زر على الفورم يتم اضافته أثناء الـ RunTime بأن تستخدم حدث الـ ControlAdded الخاص بالـ Form. ولكن احذر من الأزرار الأساسيه الخاصه بك أنت فأنت لا تريدها تدعم النسخ !

ولا تنسى في جميع الأحوال أن تجعل خاصيه KeyPreview الخاصه بالـ Form بـ true لأنها مهمه علشان Ctrl+V.

وكل عام وانت بخير. والسلام عليكم.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5

السلام عليكم

جزاك الله خيرا

اللهم إنك عالم بحالى وغنى عن سؤالى فأهدنى وأصلح لى بالى

هذا الموضوع مغلق.

مواضيع مشابهة