كيف يمكنني تمرير قيمة خانة الاختيار بالرجوع إلى CLI؟

StackOverflow https://stackoverflow.com/questions/1078680

سؤال

لدي تطبيق واجهة المستخدم الرسومية مكتوب بلغة C++/CLI والذي يحتوي على الكثير من الخيارات القابلة للتكوين.لدي بعض الوظائف المحملة بشكل زائد والتي تستخرج القيم من مصدر البيانات الخاص بي وأرغب في ربط خياراتي بتلك القيم.

إذن، إليك اثنين من برامج استرداد البيانات:

bool GetConfigSingle(long paramToGet, String^% str, char* debug, long debugLength);
bool GetConfigSingle(long paramToGet, bool^% v_value, char* debug, long debugLength);

كنت أتمنى المرور في خانة الاختيار Checked getter/setter على النحو التالي:

result = m_dataSource->GetConfigSingle(CONFIG_OPTION1, this->myOption->Checked, debug, debugLen);

...ولكن لسبب ما أحصل على خطأ مترجم غريب يشير إلى Checked لا يتم تمرير القيمة كما أتوقع:

1>.\DataInterface.cpp(825) : error C2664: 'bool DataInterface::GetConfigSingle(long,System::String ^%, char*, long)' : cannot convert parameter 2 from 'bool' to 'System::String ^%'

في السابق، قام هذا الرمز بتمرير مربع الاختيار وتعديل القيم نفسها، لكنني حريص على كسر التبعية التي تعتمدها مجموعة البيانات لدينا حاليًا على نماذج Windows.

إذن ما الذي أفتقده هنا؟

[يحرر] لقد قمت بملء تعريفات الوظائف كما كانت في الأصل لتجنب الارتباك - لقد فشلت محاولتي لتقليل المعلومات غير ذات الصلة.

أنا متأكد من ذلك إلى حد ما يقوم مُحضر/أداة ضبط CheckBox بإرجاع منطقي.

هل كانت مفيدة؟

المحلول

اعتقدت أنني سأوضح تعليقاتي من الأعلى وأجعلها إجابة "حقيقية" ...

عند استدعاء Checked، ما ستحصل عليه كقيمة إرجاع هو منطقي يمثل الحالة الحالية لـ CheckBox.إنها لا, ومع ذلك، إشارة إلى عضو البيانات الفعلي الذي يحتفظ بحالة CheckBox.في الواقع، لا ينبغي للفئة المغلفة بشكل صحيح أن تمنح الوصول إليها.علاوة على ذلك، نظرًا لأن Checked يُرجع منطقيًا حسب القيمة، فإن هذا المنطقي هو كائن مؤقت لا يكون موجودًا بالضرورة في وقت استدعاء GetConigigSingle.

هذا يترك لك عدة خيارات.إما تمرير منطقيs حسب القيمة، ثم قم بتعيين حالة CheckBox لاحقًا، أو قم بتمرير CheckBox نفسه حسب المرجع و"حدده" أينما تريد.

نصائح أخرى

الزائدين من الأسلوب GetConfigSingleFile التي ذكرتها تأخذ وسيطتين بينما تقوم بتمرير 4 وسيطات إلى الطريقة.هل هناك أي حجج افتراضية؟إذا كانت الإجابة بنعم، هل يمكنك إعادة إنتاج إعلانات الطريقة الأصلية؟

على الأرجح، يتوقع التحميل الزائد للوسيطة 4 لهذه الطريقة String^% كالحجة الثانية.هذا ما يقترحه المترجم على أي حال.ولكن إذا تمكنا من إلقاء نظرة على إعلانات الطريقة التي يمكن أن تساعد في تشخيص المشكلة.

هذه ليست إجابة على سؤالي، ولكنها تستحق أن تكون على دراية بها - على ما يبدو أنها موجودة غرابة في تمرير الخصائص حسب المرجع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top