لنتحدث عن المنشور الأخير "نشر كائن مشتق من PrintDocument يدعم كميات كبيرة من طباعة النص وجعل الكود المصدري عامًا"
لقد نشرت في المقالة كائنًا يرث من System.Drawing.Printing.PrintDocument. يدعم هذا الكائن إنشاء مستندات مهمة الطباعة من تدفقات الملفات والسلاسل النصية، ولم أختبره بعناية في ذلك الوقت ووجدت أن هناك منطقًا كبيرًا علة في ذلك.
يتمثل عَرَض الخطأ في أنه إذا استخدمت تعيين سلسلة لإنشاء مثيل كائن، فسوف تتفاجأ عندما تجد أن محتوى المستند قد تمت طباعته مرتين أثناء معاينة الطباعة. ولم أكتشف هذه المشكلة إلا لاحقًا.
وبعد البحث وجدت السبب ولكن السبب غريب.
المبدأ هو أنه من أجل قراءة سطر واحد من النص في كل مرة، أستخدم فئة System.IO.StringReader كقارئ. منشئه هو السلسلة التي يتم تمريرها لحفظ محتوى النص، ثم يستخدم أسلوب StringReader.ReadLine() لقراءة النص وإنشاء محتوى مطبوع.
لكن يجب علي تنفيذ آلية للتحقق مما إذا كان القارئ قد قرأ المحتوى الأخير، وطريقة StringReader.Peek() هي اكتشاف ما إذا كان هناك محتوى خلفه، وإذا لم يكن هناك محتوى، فإنها ترجع قيمة -1 . بعد الاختبار، بغض النظر عن كيفية اكتشافه، لا يتم إرجاع -1 بدلاً من ذلك، يتم إرجاع -1 بعد إدخال المحتوى مرتين، مما يؤدي إلى عرض نفس المحتوى مرتين.
لقد تم تصحيح هذا الخطأ. لقد قمت بتعديل طريقة الكشف من خلال طرق أخرى. هذه المرة ليست هناك حاجة لكتابة المحتوى مرتين. أرجو من كل من قام بتحميله أن يقوم بتحميله مرة أخرى.
الآن دعونا نتحدث عن عنصر التحكم PrintPreveiwControl.
أول شيء يجب ملاحظته هو أنه عنصر تحكم مخصص للنوافذ، وليس نافذة جديدة لمعاينة الطباعة. إنه جزء من نافذة معاينة الطباعة الذي يعرض معاينة الطباعة إذا كنت تريد استخدامها، فيجب عليك إنشاء نموذج Windows ثم استخدامه.
لنكون صادقين، فإن نافذة معاينة الطباعة الخاصة بشركة Microsoft في .net سيئة للغاية ولا تبدو جيدة وليس من السهل استخدامها، لذلك توفر Microsoft عنصر تحكم System.Windows.Forms.PrintPreviewControl، وهذا التحكم ليس جيدًا أيضًا. السبب الرئيسي هو أنه لا يدعم عجلة الماوس، والأهم من ذلك أنه لا يدعم طباعة عدد الصفحات. يعد عدد الصفحات المتاحة أثناء معاينة الطباعة سمة ضرورية لأزرار مثل "الصفحة السابقة" و "الصفحة التالية" في نافذة معاينة الطباعة.
لذلك استخدمت Reflector لتفكيك عنصر تحكم PrintPreviewControl الخاص بـ Microsoft، واستخدمت الكود الأصلي الخاص به وأضفت معالج الأحداث "OnMouseWheel"، وتم تصميم OnMouseWheel خصيصًا للتعامل مع تشغيل عجلة الماوس عند تمريرها. قم أيضًا بنشر الكود المصدري.
لقد أضفت الكثير من التعليقات في طريقة OnMouseWheel. يمكن للأصدقاء الذين يرغبون في التعامل مع عجلة الماوس استخدام مبادئ هذا الرمز.
التنزيل: انقر هنا للتنزيل
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html