المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : منع تكرار البيانات في ListBox


أبو محسن
03-12-2015, 10:47 PM
بسم الله
السلام عليكم ورحمة الله وبركاته

عندي عنصر ListBox وفيه مجموعة من الملفات، بالنسبة لـ Item Data ففيه مسار الملف في جهاز الكمبيوتر، أما Item Text ففيه اسم الملف
عندي Input + Button > لإضافة الملفات الجديدة.

ليكن مثلاً في ListBox اسم abc4.jpg ومسار الملف C:\img

كيف يمكنني منع تكرار العناصر في ListBox؟؟ بحيث لو اضفت مسار ملف جديد باستخدام Input يعلمني أن هذا الملف موجود في قائمة ListBox (مع إمكانية تحديد الملف الموجود، إن أمكن)؟؟

انتظركم أحبتي :)

ياسرهتهت
04-12-2015, 12:57 AM
بسم الله الرحمن الرحيم

اخي ابو محسن انا لم افهم طلبك جيد
كان مفروض تضع ملف مفتوح

ولكن دعنا نتبع اسلوب استاذنا الفاضل
:abc_152:ابو بلقيس:abc_152:

وساجيبك عن ما فهمت
نفترض انك عندك Input1 و Input2
لتدخل ItemText وItemData من خلالهم لـــListBox1
ولا تريد ان لا تكرر ادخال ItemText

هذا الكود في زر الادخال يحقق ما تريد

TextInp1 = Input.GetText("Input1");
TextInp2 = Input.GetText("Input2");

h = ListBox.FindItem("ListBox1", 1, LB_BYTEXT, TextInp1);

if h ~= -1 or TextInp1=="" then
Dialog.TimedMessage("......", "åÐÇ ÇáÇÓã ãæÌæÏ Öãä ÇáÞÇÆãÉ Ãæ ÍÏÏ ÇÓãÇ ááÇÏÎÇá", 5000, MB_ICONINFORMATION);
else
ListBox.AddItem("ListBox1", TextInp1, TextInp2);
end



موفق بإذن الله ... لك مني أجمل تحية .

ثامر أبو بلقيس
04-12-2015, 02:44 AM
نيابة عن أخي المحترم:abc_138: ياسر:abc_138:

هاهي محاولة سريعة يمكن تعديلها أو تهذيبها
الوقت متأخر اذ بدى تعديل غدا إن شاء الله

ListBox.AddItem("ListBox1", Input.GetText("Input1"), ""); ---- هذا اجراء تسجيل جديد
------------------------- هنااا لا تغيير شيء فقط ضعها في زر التنفيذ--------
--- بعد التحقــق ستظهر رسالة بأن الملف موجود أم لا -----------------------
items = {};
for i = 1 , ListBox.GetCount("ListBox1") do
v = ListBox.GetItemText("ListBox1", i);
Table.Insert(items, i, v);
end
tamer = {}
for i=1,Table.Count(items) do
if not tamer[items[i]] then
tamer[items[i]] = true
if items[i] == Input.GetText("Input1") then
Dialog.Message("الملــف موجود و مســـاره",ListBox.GetItemData("ListBox1", i));
end
else
ListBox.DeleteItem("ListBox1", i);
end
end
------------------------abou_belkiss---------------------------------------

اعتمدت فيها على تحديد العناصر المكررة و جعلها أحادية عند الإجراء :abc_088: و التقاط معلومات المكرر قبل الحذف
لإعلانها كسبب لرفض التسجيل .

================================================== ==============
معلومة يمكنك استعمال الإضافة AE لحذف المكرر
بالكود
AE.ListBoxDeleteItemsRepeat("ListBox1");


لكن قد لا تساعدك في الاعلان عن بيانات الملف المشابه و مساره
============================== نلتقي بود ============================

أبو محسن
04-12-2015, 08:09 AM
بسم الله الرحمن الرحيم

اخي ابو محسن انا لم افهم طلبك جيد
كان مفروض تضع ملف مفتوح

ولكن دعنا نتبع اسلوب استاذنا الفاضل
:abc_152:ابو بلقيس:abc_152:

وساجيبك عن ما فهمت
نفترض انك عندك Input1 و Input2
لتدخل ItemText وItemData من خلالهم لـــListBox1
ولا تريد ان لا تكرر ادخال ItemText

هذا الكود في زر الادخال يحقق ما تريد

TextInp1 = Input.GetText("Input1");
TextInp2 = Input.GetText("Input2");

h = ListBox.FindItem("ListBox1", 1, LB_BYTEXT, TextInp1);

if h ~= -1 or TextInp1=="" then
Dialog.TimedMessage("......", "åÐÇ ÇáÇÓã ãæÌæÏ Öãä ÇáÞÇÆãÉ Ãæ ÍÏÏ ÇÓãÇ ááÇÏÎÇá", 5000, MB_ICONINFORMATION);
else
ListBox.AddItem("ListBox1", TextInp1, TextInp2);
end

موفق بإذن الله ... لك مني أجمل تحية .






أشكرك أخي الفاضل ياسر (يسر الله أمرك)
بل بمثالك هذا أنت قد فهمت طلبي 100%
فـ الانبت 1 هو لمسار الملف، أما الانبت 2 فهو لاسم الملف وامتداده
كان خطأي في كود ListBox.FindItem أني عند وضع الشرط أضع:
if h ~= nil then
وهذا الخطأ الذي جعلني أسئل

أشكرك :abc_138:
نيابة عن أخي المحترم:abc_138: ياسر:abc_138:

هاهي محاولة سريعة يمكن تعديلها أو تهذيبها
الوقت متأخر اذ بدى تعديل غدا إن شاء الله

ListBox.AddItem("ListBox1", Input.GetText("Input1"), ""); ---- هذا اجراء تسجيل جديد
------------------------- هنااا لا تغيير شيء فقط ضعها في زر التنفيذ--------
--- بعد التحقــق ستظهر رسالة بأن الملف موجود أم لا -----------------------
items = {};
for i = 1 , ListBox.GetCount("ListBox1") do
v = ListBox.GetItemText("ListBox1", i);
Table.Insert(items, i, v);
end
tamer = {}
for i=1,Table.Count(items) do
if not tamer[items[i]] then
tamer[items[i]] = true
if items[i] == Input.GetText("Input1") then
Dialog.Message("الملــف موجود و مســـاره",ListBox.GetItemData("ListBox1", i));
end
else
ListBox.DeleteItem("ListBox1", i);
end
end
------------------------abou_belkiss---------------------------------------اعتمدت فيها على تحديد العناصر المكررة و جعلها أحادية عند الإجراء :abc_088: و التقاط معلومات المكرر قبل الحذف
لإعلانها كسبب لرفض التسجيل .

================================================== ==============
معلومة يمكنك استعمال الإضافة AE لحذف المكرر
بالكود
AE.ListBoxDeleteItemsRepeat("ListBox1");
لكن قد لا تساعدك في الاعلان عن بيانات الملف المشابه و مساره
============================== نلتقي بود ============================
مرحباً باستاذنا القدير: أبا بلقيس، أنت اسم على مسمى والله.
الحقيقة التي لا أخفيها عنك أني لم أفهم مثالك جيداً.. ووجدت مساعدة أخي ياسر هي أسهل وتؤدي الغرض المطلوب مع بعض التعديل على الكود.. ليصبح هكذا:

sAdd = Input.GetText("sAd");

if (sAdd == "") then
Dialog.Message("", "ليس هُناك بيانات مُدرجة؟")
else

search_index = ListBox.FindItem("sTest", -1, LB_BYDATA, sAdd);

if (search_index == -1) then
ListBox.AddItem("sTest", sAdd, sAdd);

else
Dialog.Message("", "البيانات موجودة مسبقاً")
end

end
رأيت أن هذا أسهل ويفي بالغرض المنشود... هل لك رأي آخر أستاذي القدير؟

---
بالنسبة للإضافة AE هل يمكنك رفعها لأنها ليست بحوزتي!

ثامر أبو بلقيس
04-12-2015, 02:02 PM
لا رأي لي أخي أبو محسن
اعتمد المناسب لمشروعك فتلك هي الغاية

عن الاضافة فقط لحيازتها لأن الأكواد كما ذكرت
أدت المطلوب
Action Extension
http://up.top4top.net/downloadf-top4top_ac42cb8e2a1-rar.html

موفق :abc_138:

المـهاجر
04-12-2015, 02:27 PM
إستخدام الجداول يكون لحفظ المتغيرات الى خارج الإجراء [ البلوك ] للإستخدام اللاحق أو لسبب يمنع من الحصول على نتائج بداخل الإجراء الحالى
عدا ذلك تتم معالجة البيانات داخل الإجراء [ البلوك ] الذى تكونت من خلاله طالما لا يوجد ما يمنع ذلك
و بدون استخدام الجداول

أبو محسن
04-12-2015, 03:17 PM
لا رأي لي أخي أبو محسن
اعتمد المناسب لمشروعك فتلك هي الغاية

عن الاضافة فقط لحيازتها لأن الأكواد كما ذكرت
أدت المطلوب
Action Extension
http://up.top4top.net/downloadf-top4top_ac42cb8e2a1-rar.html

موفق :abc_138:
جزاك الله خير :abc_152:

إستخدام الجداول يكون لحفظ المتغيرات الى خارج الإجراء [ البلوك ] للإستخدام اللاحق أو لسبب يمنع من الحصول على نتائج بداخل الإجراء الحالى
عدا ذلك تتم معالجة البيانات داخل الإجراء [ البلوك ] الذى تكونت من خلاله طالما لا يوجد ما يمنع ذلك
و بدون استخدام الجداول

هل يمكنك ترجمة ما قلته بمثال بسيط ؟؟

المـهاجر
04-12-2015, 08:58 PM
جزاك الله خير :abc_152:



هل يمكنك ترجمة ما قلته بمثال بسيط ؟؟

اقصد انك اخترت الحل المناسب

الكلام الخاص بإستخدام الجداول غير موجه لحضرتك تحديدا
هى نصيحة لكافة المبرمجين قبل اللجوء للجداول فى مسائل لا تستدعيها

:abc_152:

أبو محسن
05-12-2015, 07:16 PM
اقصد انك اخترت الحل المناسب

الكلام الخاص بإستخدام الجداول غير موجه لحضرتك تحديدا
هى نصيحة لكافة المبرمجين قبل اللجوء للجداول فى مسائل لا تستدعيها

:abc_152:

أشكرك :abc_152:

عظيمه
19-01-2016, 10:37 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
موفق بإذن الله ... لك مني أجمل تحية .