কীভাবে ব্যবহারকারীদের নিয়ন্ত্রণে ঝলকানো ঠিক করা যায়


107

আমার প্রয়োগে আমি ক্রমাগত এক নিয়ন্ত্রণ থেকে অন্য নিয়ন্ত্রণে চলেছি। আমি নং তৈরি করেছি। ব্যবহারকারীর নিয়ন্ত্রণ, তবে নেভিগেশন চলাকালীন আমার নিয়ন্ত্রণগুলি ঝাঁকুনি হয়ে যায়। এটি আপডেট করতে 1 বা 2 সেকেন্ড সময় নেয়। আমি এটি সেট করার চেষ্টা করেছি

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
or
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.DoubleBuffer, true);

তবে এটি কোনও উপকারে আসে না ... প্রতিটি কন্ট্রোলের বিভিন্ন নিয়ন্ত্রণের সাথে একই পটভূমি চিত্র থাকে image তাহলে এর সমাধান কী? ..
ধন্যবাদ।


এই বিবৃতি কোথায়? আদর্শভাবে, এগুলি কনস্ট্রাক্টরে রাখুন। আপনি UpdateStylesএই সেট করার পরে কল করেছেন ? এটি খারাপভাবে নথিভুক্ত, তবে কখনও কখনও এটি প্রয়োজন হতে পারে।
টমাস

উত্তর:


306

এটি ডাবল বাফারিং সমাধান করতে পারে এমন ঝাঁকুনি নয়। বা বিগিনিউডেট বা সাসপেন্ডলআউট। আপনি অনেকগুলি নিয়ন্ত্রণ পেয়েছি BackgroundImage এটি একটি করতে পারেন অনেক খারাপ।

এটি ব্যবহারকারী কন্ট্রোল নিজেই রঙ করলে when এটি যেখানে শিশু নিয়ন্ত্রণ উইন্ডোগুলিতে যায় সেখানে ছিদ্র রেখে পটভূমি চিত্রটি আঁকবে। প্রতিটি শিশু নিয়ন্ত্রণ তারপরে নিজের রঙ করার জন্য একটি বার্তা পায়, তারা তাদের উইন্ডো সামগ্রীতে গর্তটি পূর্ণ করবে। যখন আপনার অনেকগুলি নিয়ন্ত্রণ থাকে, তখন সেই গর্তগুলি কিছুক্ষণের জন্য ব্যবহারকারীর কাছে দৃশ্যমান হয়। তারা সাধারণত সাদা, অন্ধকার হলে ব্যাকগ্রাউন্ড আইমেজের সাথে খারাপভাবে বিপরীত হয়। অথবা ফর্মটির অস্বচ্ছতা বা ট্রান্সপারেন্সিকি বৈশিষ্ট্যযুক্ত সেট থাকলে তা কেবল কালো হতে পারে, ঠিক যে কোনও কিছুর সাথে খারাপভাবে বিপরীতে।

এটি উইন্ডোজ ফর্মগুলির একটি দুর্দান্ত মৌলিক সীমাবদ্ধতা, উইন্ডোজ যেভাবে উইন্ডোজকে রেন্ডার করে এটি এটি আটকে রয়েছে। ডাব্লুপিএফ বিটিডব্লিউ দ্বারা স্থির, এটি শিশু নিয়ন্ত্রণের জন্য উইন্ডোজ ব্যবহার করে না। আপনি যা চান তা শিশু নিয়ন্ত্রণগুলি সহ পুরো ফর্মটি ডাবল বাফার করছে। এটি সম্ভব, সমাধানের জন্য এই কোডটিতে আমার কোডটি পরীক্ষা করুন । যদিও এর পার্শ্ব-প্রতিক্রিয়া রয়েছে এবং চিত্রের গতি আসলে বাড়ায় না। কোডটি সহজ, আপনার ফর্মটিতে এটি আটকে দিন (ব্যবহারকারীর নিয়ন্ত্রণ নয়):

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 

পেইন্টিংয়ের গতি উন্নত করতে আপনি করতে পারেন এমন অনেকগুলি বিষয়, যে ফ্লিকারটি আর লক্ষণীয় নয়। ব্যাকগ্রাউন্ডআইমেজকে মোকাবেলা করে শুরু করুন। উত্স চিত্রটি বড় হলে এগুলি সত্যই ব্যয়বহুল হতে পারে এবং নিয়ন্ত্রণের সাথে ফিট করার জন্য সঙ্কুচিত হওয়া দরকার। ব্যাকগ্রাউন্ডআইমেজ লেআউট সম্পত্তিটি "টাইল" এ পরিবর্তন করুন। যদি এটি একটি লক্ষণীয় গতি বাড়িয়ে দেয় তবে আপনার চিত্রাঙ্কিত প্রোগ্রামে ফিরে যান এবং আদর্শ নিয়ন্ত্রণের আকারের সাথে আরও ভাল মিলের জন্য চিত্রটিকে পুনরায় আকার দিন। অথবা চিত্রটির সঠিক আকারের মাপের অনুলিপি তৈরি করতে ইউসির অনারাইজ () পদ্ধতিতে কোড লিখুন যাতে প্রতিবারের নিয়ন্ত্রণটি পুনরায় আকার পরিবর্তন করতে না পারে। সেই অনুলিপিটির জন্য ফর্ম্যাট 32 বিপিপিআরজিবি পিক্সেল ফর্ম্যাটটি ব্যবহার করুন, এটি অন্য পিক্সেল বিন্যাসের চেয়ে প্রায় 10 গুণ বেশি রেন্ডার করে।

আপনি পরবর্তী কাজটি করতে পারেন তা হ'ল ছিদ্রগুলিকে এতটা লক্ষণীয় হতে পারে এবং চিত্রের সাথে খারাপভাবে বিপরীত হয়। আপনি ইউসির জন্য ডাব্লুএস_সিএলসিপিএইচএলডিআরএন স্টাইলের পতাকাটি বন্ধ করতে পারেন , এই পতাকাটি যেখানে শিশু নিয়ন্ত্রণে চলে সেই অঞ্চলে ইউসিটিকে চিত্র আঁকাতে বাধা দেয়। ইউজারকন্ট্রোলের কোডটিতে এই কোডটি আটকে দিন:

protected override CreateParams CreateParams {
  get {
    var parms = base.CreateParams;
    parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
    return parms;
  }
}

শিশু নিয়ন্ত্রণগুলি এখন তাদের পটভূমি চিত্রের শীর্ষে আঁকবে। আপনি এখনও তাদের একের পর এক চিত্র আঁকতে দেখবেন, তবে কুৎসিত মধ্যবর্তী সাদা বা ব্ল্যাকহোলটি দৃশ্যমান হবে না।

সর্বশেষে তবে অন্তত নয়, ধীরে ধীরে পেইন্টিং সমস্যাগুলি সমাধান করার জন্য শিশু নিয়ন্ত্রণের সংখ্যা হ্রাস করা সর্বদা একটি ভাল পদ্ধতির। ইউসির অনপেইন্ট () ইভেন্টটি ওভাররাইড করুন এবং এখন কোনও সন্তানের মধ্যে যা দেখানো হয়েছে তা আঁকুন। বিশেষ লেবেল এবং পিকচারবক্স খুব অপব্যয়কারী। পয়েন্ট এবং ক্লিকের জন্য সুবিধাজনক তবে তাদের হালকা ওজনের বিকল্প (একটি স্ট্রিং বা একটি চিত্র অঙ্কন) আপনার অনপেন্ট () পদ্ধতিতে কেবলমাত্র একক লাইন কোড গ্রহণ করে।


আমার জন্য WS_CLIPCHILDREN উন্নত ব্যবহারকারীর অভিজ্ঞতা বন্ধ করুন।
মহেশ

একেবারে নিখুঁত! .. অনেক অনেক ধন্যবাদ
আলেজান্দ্রো এলেস

8

এটি একটি আসল সমস্যা, এবং হ্যান্স প্যাস্যান্ট যে উত্তর দিয়েছে তা ফ্লিকারটি সংরক্ষণের জন্য দুর্দান্ত। তবে, তিনি যেমন উল্লেখ করেছিলেন তার পার্শ্ব প্রতিক্রিয়া রয়েছে এবং সেগুলি কুরুচিপূর্ণ (UI কুশ্রী) হতে পারে। যেমন বলা হয়েছে, "আপনি WS_CLIPCHILDRENইউসির জন্য স্টাইলের পতাকাটি বন্ধ করতে পারেন ", তবে এটি কেবল একটি ইউসির জন্য এটি বন্ধ করে দেয়। মূল ফর্মের উপাদানগুলির মধ্যে এখনও সমস্যা রয়েছে।

উদাহরণস্বরূপ, প্যানেল স্ক্রোল বারটি আঁকেন না, কারণ এটি প্রযুক্তিগতভাবে শিশু অঞ্চলে রয়েছে। তবে সন্তানের উপাদানটি স্ক্রোল বারটি আঁকবে না, সুতরাং এটি মাউস শেষ না হওয়া পর্যন্ত আঁকা যায় না (বা অন্য কোনও ইভেন্ট এটি ট্রিগার করে)।

এছাড়াও, অ্যানিমেটেড আইকনগুলি (একটি ওয়েটের লুপে আইকন পরিবর্তন করা) কাজ করে না। আইকনগুলিকে tabPage.ImageKeyএকটিতে সরানো অন্য ট্যাব পৃষ্ঠাগুলি যথাযথভাবে আকার পরিবর্তন / পুনরায় রঙ করতে পারে না।

সুতরাং আমি WS_CLIPCHILDRENপ্রারম্ভিক পেইন্টিংটি বন্ধ করার জন্য একটি উপায় খুঁজছিলাম যাতে আমার ফর্মটি সুন্দরভাবে আঁকা লোড হবে বা আরও অনেকগুলি উপাদান সহ আমার ফর্মটি পুনরায় আকার দেওয়ার সময় কেবল এটি চালু করুন।

কৌশলটি হ'ল অ্যাপ্লিকেশনটি CreateParamsপছন্দসই WS_EX_COMPOSITED/WS_CLIPCHILDRENশৈলীতে কল করা । আমি এখানে একটি হ্যাক পেয়েছি ( https://web.archive.org/web/20161026205944/http://www.angryhacker.com/blog/archive/2010/07/21/how-to-get-rid-of- ফ্লিকারে উইন্ডোজ-ফর্ম-অ্যাপ্লিকেশন.এসপিএক্স ) এবং এটি দুর্দান্ত কাজ করে। ধন্যবাদ অ্যাংরিহ্যাকার!

আমি TurnOnFormLevelDoubleBuffering()ফর্ম ResizeBeginইভেন্টে TurnOffFormLevelDoubleBuffering()কলটি রেখেছি এবং পুনরায় আকারের ইভেন্টটি ফর্মটিতে কল করেছি (বা এটি WS_CLIPCHILDRENপ্রাথমিকভাবে সঠিকভাবে আঁকার পরে কেবল এটি ছেড়ে দেই ))

    int originalExStyle = -1;
    bool enableFormLevelDoubleBuffering = true;

    protected override CreateParams CreateParams
    {
        get
        {
            if (originalExStyle == -1)
                originalExStyle = base.CreateParams.ExStyle;

            CreateParams cp = base.CreateParams;
            if (enableFormLevelDoubleBuffering)
                cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
            else
                cp.ExStyle = originalExStyle;

            return cp;
        }
    }

    public void TurnOffFormLevelDoubleBuffering()
    {
        enableFormLevelDoubleBuffering = false;
        this.MaximizeBox = true;
    }

আপনার কোডে TurnOnFormLevelDoubleBuffering () পদ্ধতিটি অন্তর্ভুক্ত নয় ...
ড্যান ডাব্লু

@ ড্যানডাব্লু এই উত্তরটিতে পোস্ট করা ইউআরএলটি দেখুন ( ক্রুদ্ধহ্যাকার
ব্লগ

এই উত্তরের লিঙ্কটি মারা গেছে বলে মনে হচ্ছে। আমি সমাধানটি সম্পর্কে আগ্রহী, আপনার কি অন্য কোনও উদাহরণের লিঙ্ক আছে?
প্রেট হিন্ডস

6

আপনি যদি নিয়ন্ত্রণের কোনও কাস্টম পেইন্টিং করেন (অর্থাত্ ওপেন্ট ওভাররাইড) আপনি নিজেই ডাবল বাফারিং চেষ্টা করতে পারেন।

Image image;
protected override OnPaint(...) {
    if (image == null || needRepaint) {
        image = new Bitmap(Width, Height);
        using (Graphics g = Graphics.FromImage(image)) {
            // do any painting in image instead of control
        }
        needRepaint = false;
    }
    e.Graphics.DrawImage(image, 0, 0);
}

এবং কোনও সম্পত্তি দিয়ে আপনার নিয়ন্ত্রণকে অকার্যকর করুন NeedRepaint

অন্যথায় সাসপেন্ডলআউট এবং রেজিউমালাউট সহ উপরের উত্তরটি সম্ভবত আপনি চান is


ডাবলবফার অনুকরণ করার জন্য এটি একটি সৃজনশীল পদ্ধতি! আপনি এর if (image != null) image.Dispose();আগে যোগ করতে পারেনimage = new Bitmap...
এস। স্পর্শান

3

2

প্রধান ফর্ম বা যেখানে ব্যাকগ্রাউন্ড ইমেজ বসবাস সেট ব্যবহারকারী নিয়ন্ত্রণ BackgroundImageLayoutকরতে সম্পত্তি Centerবা Stretch। আপনি যখন ব্যবহারকারী নিয়ন্ত্রণটি উপস্থাপন করছেন তখন আপনি একটি বড় পার্থক্য লক্ষ্য করবেন।


2

আমি এটিকে মন্তব্য হিসাবে যুক্ত করার চেষ্টা করেছি তবে আমার পর্যাপ্ত পয়েন্ট নেই। এটি হ'ল একমাত্র জিনিস যা আমার জ্বলজ্বলে সমস্যাগুলিকে সাহায্য করেছে তার পোস্টের জন্য হান্সকে অনেক ধন্যবাদ। যে কেউ আমার জন্য সি ++ বোল্ডার ব্যবহার করছেন তা এখানে অনুবাদ

আপনার অ্যাপ্লিকেশনের মূল ফর্ম .h ফাইলের সাথে ক্রিয়েটপ্যারামস ঘোষণাটি যুক্ত করুন eg

class TYourMainFrom : public TForm
{
protected:
    virtual void __fastcall CreateParams(TCreateParams &Params);
}

এবং এটি আপনার .cpp ফাইলে যুক্ত করুন

void __fastcall TYourMainForm::CreateParams(TCreateParams &Params)
{
    Params.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    TForm::CreateParams(Params);
}

2

কোডটি আপনার কনস্ট্রাক্টর বা অনলয়েড ইভেন্টে রেখে দিন এবং আপনি যদি কিছু নিয়ন্ত্রণের ব্যবহার করে এমন কাস্টম ব্যবহারকারী নিয়ন্ত্রণ ব্যবহার করেন তবে আপনার এই কাস্টম নিয়ন্ত্রণগুলিও দ্বিগুণ বাফার হয়েছে তা নিশ্চিত করতে হবে (যদিও এমএস ডকুমেন্টেশনে তারা বলছেন) এটি ডিফল্টরূপে সত্যে সেট করা আছে)।

আপনি যদি একটি কাস্টম নিয়ন্ত্রণ তৈরি করে থাকেন তবে আপনি এই পতাকাটি আপনার সিটারে যুক্ত করতে পারেন:

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

Formচ্ছিকভাবে আপনি এই কোডটি আপনার ফর্ম / নিয়ন্ত্রণে ব্যবহার করতে পারেন:

foreach (Control control in Controls)
{
    typeof(Control).InvokeMember("DoubleBuffered",
        BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
        null, control, new object[] { true });
}

আমরা ফর্ম / নিয়ন্ত্রণের সমস্ত নিয়ন্ত্রণের মাধ্যমে পুনরাবৃত্তি করি এবং তাদের DoubleBufferedসম্পত্তি অ্যাক্সেস করি এবং তারপরে ফর্মের প্রতিটি নিয়ন্ত্রণ ডাবল বাফার করার জন্য আমরা এটিকে সত্যে পরিবর্তন করি। আমরা এখানে প্রতিফলন করার কারণটি হ'ল কল্পনা করুন যে আপনার এমন একটি নিয়ন্ত্রণ রয়েছে যাতে শিশু নিয়ন্ত্রণ রয়েছে যা অ্যাক্সেসযোগ্য নয়, সেভাবে তারা ব্যক্তিগত নিয়ন্ত্রণ হলেও আমরা তাদের সম্পত্তিটিকে সত্যে পরিবর্তন করব।

ডাবল বাফারিং কৌশল সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে

এই সমস্যাটি বাছাই করতে আমি আরও একটি সম্পত্তি আছে যা আমি সাধারণত ওভাররাইড করে:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams parms = base.CreateParams;
        parms.ExStyle |= 0x00000020; // WS_EX_COMPOSITED
        return parms;
    }
}

WS_EX_COMPOSITED - ডাবল-বাফারিং ব্যবহার করে নীচে থেকে শীর্ষে চিত্রের ক্রমে উইন্ডোর সমস্ত বংশধরদের আঁকুন।

আপনি এখানে স্টাইলের আরও পতাকা পেতে পারেন ।

আশা করি এইটি কাজ করবে!


1

হান্স যে উত্তরটি দিয়েছিল তা যুক্ত করতে কেবল:

(টিএলডিআর সংস্করণ: স্বচ্ছতা আপনার ভাবার চেয়ে ভারী, সর্বত্র কেবল শক্ত রঙ ব্যবহার করুন)

যদি WS_EX_COMPOSITED, DoubleBuffered এবং WS_CLIPCHILDREN আপনার ঝাঁকুনির সমাধান না করে (আমার জন্য ডাব্লুএসসিএলসিপিচিল্ডেন এটি আরও খারাপ করে তুলেছে), চেষ্টা করে দেখুন: আপনার সমস্ত নিয়ন্ত্রণ এবং আপনার সমস্ত কোড দিয়ে যান এবং যেখানেই আপনার ব্যাক কালার, ফোরকলার বা স্বচ্ছতা বা অর্ধ-স্বচ্ছতা রয়েছে বা অন্য কোনও রঙ, কেবল এটি সরিয়ে ফেলুন, কেবলমাত্র শক্ত রং ব্যবহার করুন। বেশিরভাগ ক্ষেত্রে যেখানে আপনি ভাবেন যে আপনার সবেমাত্র রয়েছে স্বচ্ছতা ব্যবহার করার আপনি না। আপনার কোড এবং নিয়ন্ত্রণগুলি পুনরায় ডিজাইন করুন এবং শক্ত রঙ ব্যবহার করুন। আমার ভয়ানক, ভয়ানক ঝাঁকুনি ছিল এবং প্রোগ্রামটি খুব স্বচ্ছ ছিল। একবার আমি স্বচ্ছতা সরিয়ে ফেললে তা উল্লেখযোগ্যভাবে বেড়ে গেছে এবং 0 টি ফ্লিকার রয়েছে।

সম্পাদনা: আরও যোগ করতে, আমি সবেমাত্র আবিষ্কার করেছি যে ডাব্লুএস_এক্স_সিএমপিএসআইপিটি উইন্ডো-প্রশস্ত হতে হবে না, এটি কেবলমাত্র নির্দিষ্ট নিয়ন্ত্রণগুলিতে প্রয়োগ করা যেতে পারে! এটি আমাকে অনেক ঝামেলা বাঁচিয়েছিল। আপনার যা প্রয়োজন নিয়ন্ত্রণ থেকে উত্তরাধিকার সূত্রে কেবল একটি কাস্টম নিয়ন্ত্রণ করুন এবং WS_EX_COMPOSITED এর জন্য ইতিমধ্যে পোস্ট করা ওভাররাইড পেস্ট করুন। আপনি কেবলমাত্র এই নিয়ন্ত্রণে নিম্ন-স্তরের ডাবল-বাফার পান, বাকি অ্যাপ্লিকেশনটিতে দুষ্টু পার্শ্ব প্রতিক্রিয়া এড়ানো!


0

আমি জানি এই প্রশ্নটি অনেক পুরানো, তবে এটিতে আমার অভিজ্ঞতা দিতে চাই।

Tabcontrolওভাররাইডযুক্ত OnPaintএবং / অথবা OnPaintBackGroundউইন্ডোজ 8 এ। নেট 4.0 ব্যবহার করে ফর্মে ঝাঁকুনিতে আমার অনেক সমস্যা হয়েছিল।

কেবলমাত্র সেই কাজটিই ওভাররাইডগুলিতে পদ্ধতিটি ব্যবহার করে না , অন্য কথায়, যখন অঙ্কিত ছিল সরাসরি প্রদত্ত গ্রাফিকগুলিতে, এমনকি সমস্ত আয়তক্ষেত্রের চিত্র আঁকলে, ঝাঁকুনি বিচ্ছিন্ন হয়ে যায়। তবে যদি কলটি পদ্ধতিতে, এমনকি একটি ক্লিপড বিটম্যাপ অঙ্কন করে (ডাবল বাফারিংয়ের জন্য তৈরি) ফ্লিকারটি উপস্থিত হয়।Graphics.DrawImageOnPaintPaintEventArgsDrawImage

আশা করি এটা সাহায্য করবে!


0

আমি এই ফ্লিকার ফিক্স এবং এই ফন্ট ফিক্সটি একত্রিত করেছি, তারপরে ট্যাবকন্ট্রোলটিকে অকার্যকর করতে যখন পেইন্টে টাইমার শুরু করতে আমার নিজের কোডটি যুক্ত করতে হয়েছিল তখন এটি অফস্ক্রিনে ফিরে যায় ইত্যাদি ইত্যাদি etc

তিনটিই এটি করে:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class TabControlEx:TabControl
{
    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
    private const int WM_PAINT = 0x0f;
    private const int WM_SETFONT = 0x30;
    private const int WM_FONTCHANGE = 0x1d;
    private System.Drawing.Bitmap buffer;
    private Timer timer = new Timer();
    public TabControlEx()
    {
        timer.Interval = 1;
        timer.Tick += timer_Tick;
        this.SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }
    void timer_Tick(object sender, EventArgs e)
    {
        this.Invalidate();
        this.Update();
        timer.Stop();
    }
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_PAINT) timer.Start();
        base.WndProc(ref m);
    }
    protected override void OnPaint(PaintEventArgs pevent)
    {
        this.SetStyle(ControlStyles.UserPaint, false);
        base.OnPaint(pevent);
        System.Drawing.Rectangle o = pevent.ClipRectangle;
        System.Drawing.Graphics.FromImage(buffer).Clear(System.Drawing.SystemColors.Control);
        if (o.Width > 0 && o.Height > 0)
        DrawToBitmap(buffer, new System.Drawing.Rectangle(0, 0, Width, o.Height));
        pevent.Graphics.DrawImageUnscaled(buffer, 0, 0);
        this.SetStyle(ControlStyles.UserPaint, true);
    }

    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
        buffer = new System.Drawing.Bitmap(Width, Height);
    }
    protected override void OnCreateControl()
    {
        base.OnCreateControl();
        this.OnFontChanged(EventArgs.Empty);
    }
    protected override void OnFontChanged(EventArgs e)
    {
        base.OnFontChanged(e);
        IntPtr hFont = this.Font.ToHfont();
        SendMessage(this.Handle, WM_SETFONT, hFont, (IntPtr)(-1));
        SendMessage(this.Handle, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
        this.UpdateStyles();
    }
}

আমি নির্মাতা নই তবে আমি যা বুঝি বিটম্যাপ থেকে সমস্ত বাগ বাইপাস করে।

এটিই কেবলমাত্র আমার জন্য ট্যাব কন্ট্রোল (আইকনগুলি সহ) ফ্লিকারকে সুনির্দিষ্টভাবে সমাধান করেছিল।

পার্থক্য ফলাফল ভিডিও: ভ্যানিলা ট্যাবকন্ট্রোল বনাম ট্যাবকন্ট্রোলক্স

http://gfycat.com/FineGlitteringDeermouse

পুনশ্চ. আপনাকে হটট্র্যাক = সত্য সেট করতে হবে, কারণ এটি ত্রুটিটিও ঠিক করে


-2

আপনি কি Control.DoubleBufferedসম্পত্তি চেষ্টা করেছেন ?

ঝাঁকুনি হ্রাস বা প্রতিরোধ করার জন্য এই নিয়ন্ত্রণটি একটি গৌণ বাফার ব্যবহার করে এর পৃষ্ঠটি পুনরায় আঁকা উচিত কিনা তা নির্দেশ করে একটি মান অর্জন করে বা সেট করে।

এছাড়াও এটি এবং এটি সাহায্য করতে পারে।


-9

কোনও ডাবল বাফারিং এবং সেই সমস্ত স্টাফ ছেলের দরকার নেই ...

একটি সহজ সমাধান ...

আপনি যদি এমডিআই ইন্টারফেস ব্যবহার করছেন তবে কেবল নীচের কোডটি মূল ফর্মটিতে পেস্ট করুন। এটি পৃষ্ঠা থেকে সমস্ত ঝাঁকুনি সরিয়ে ফেলবে। তবে কিছু পৃষ্ঠা যা লোড করার জন্য বেশি সময় প্রয়োজন সেগুলি 1 বা 2 সেকেন্ডে শোপ্স হবে। তবে এটি একটি ঝলকানি পৃষ্ঠা দেখানোর চেয়ে ভাল যা প্রতিটি আইটেম একের পর এক আসে।

এটি সম্পূর্ণ প্রয়োগের একমাত্র সেরা সমাধান best মূল ফর্মটি দেওয়ার জন্য কোডটি দেখুন:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 

12
সুতরাং, আপনি যা বলছেন তা হ্যানস দু'বছর আগে যে উত্তর দিয়েছেন তা আসলে সত্য, সঠিক? ধন্যবাদ, ক্ষিতাইজ। এটি সত্যই খুব সহায়ক!
ফার্নান্দো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.