আমি কীভাবে কোনও নিয়ন্ত্রণ এবং এর শিশুদের জন্য পেইন্টিং স্থগিত করব?


184

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


3
এই প্রসঙ্গে এখানে আঁকতে বা আঁকতে কি বোঝাতে পারেন কেউ? (আমি নেট থেকে নতুন) কমপক্ষে একটি লিঙ্ক সরবরাহ করুন।
মিঃগ্রিন

1
এটি সত্যিই লজ্জাজনক (বা হাস্যকর) যা 15 15 বছরেরও বেশি সময় ধরে নেট আউট হয়েছে এবং এটি এখনও একটি সমস্যা। মাইক্রোসফ্ট যদি স্ক্রিনের ঝাঁকুনির মতো বাস্তব সমস্যা ঠিক করতে যতটা সময় ব্যয় করে, উইন্ডোজ এক্স ম্যালওয়্যার পান , তবে এটি অনেক দিন আগেই ঠিক করা হত।
jww

@jww তারা এটি ঠিক করেছে; একে ডাব্লুপিএফ বলে।
ফিলু

উত্তর:


304

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

প্রচুর গুগলিং এবং রিফ্লেক্টর ব্যবহারের পরে আমি ডাব্লুএম_সেট্রেড্রা উইন 32 মেসেজটি পেলাম। এটি সত্যিই নিয়ন্ত্রণগুলি অঙ্কন বন্ধ করে দেয় আপনি যখন সেগুলি আপডেট করেন এবং প্রয়োগ করতে পারেন, আইআইআরসি প্যারেন্ট / সমন্বিত প্যানেলে।

এই বার্তাটি কীভাবে ব্যবহার করতে হয় তা প্রদর্শন করে এটি একটি খুব সাধারণ শ্রেণী:

class DrawingControl
{
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);

    private const int WM_SETREDRAW = 11; 

    public static void SuspendDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
    }

    public static void ResumeDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
        parent.Refresh();
    }
}

এটিতে পূর্ণাঙ্গ আলোচনা রয়েছে - সি # এবং ডাব্লুএম_এসটিআরডিআরডির জন্য গুগল, যেমন

সি # জিটার

সাসপেন্ডিং লেআউটগুলি

এবং যার জন্য এটি উদ্বিগ্ন হতে পারে, এটি ভিবিতে অনুরূপ উদাহরণ:

Public Module Extensions
    <DllImport("user32.dll")>
    Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Boolean, ByVal lParam As IntPtr) As Integer
    End Function

    Private Const WM_SETREDRAW As Integer = 11

    ' Extension methods for Control
    <Extension()>
    Public Sub ResumeDrawing(ByVal Target As Control, ByVal Redraw As Boolean)
        SendMessage(Target.Handle, WM_SETREDRAW, True, 0)
        If Redraw Then
            Target.Refresh()
        End If
    End Sub

    <Extension()>
    Public Sub SuspendDrawing(ByVal Target As Control)
        SendMessage(Target.Handle, WM_SETREDRAW, False, 0)
    End Sub

    <Extension()>
    Public Sub ResumeDrawing(ByVal Target As Control)
        ResumeDrawing(Target, True)
    End Sub
End Module

44
কি দুর্দান্ত উত্তর এবং একটি দুর্দান্ত সাহায্য! আমি কন্ট্রোল ক্লাসের জন্য সাসপেন্ডড্রয়িং এবং রেজ্যিউমড্রয়িং এক্সটেনশন পদ্ধতি তৈরি করেছি, তাই আমি কোনও প্রসঙ্গে যে কোনও নিয়ন্ত্রণের জন্য তাদের কল করতে পারি।
জ্যাচ জনসন

2
গাছের মতো নিয়ন্ত্রণ ছিল যা কেবলমাত্র একটি নোডকে বাচ্চাদের পুনর্বিন্যাস করার জন্য সঠিকভাবে রিফ্রেশ করবে যদি আপনি ধসে পড়ে যান তবে এটি প্রসারিত করুন, যা কুশ্রী ঝাঁকুনির দিকে পরিচালিত করে। এটি পুরোপুরি কাজ করার জন্য নিখুঁতভাবে কাজ করেছে। ধন্যবাদ! (মজাদারভাবে যথেষ্ট, নিয়ন্ত্রণটি ইতিমধ্যে সেন্ডম্যাসেজ আমদানি করে, এবং ডাব্লুএম_সেট্রেড্রাও সংজ্ঞায়িত করে, তবে আসলে এটি কোনও কিছুর জন্য ব্যবহার করে না Now এখন এটি করে))
নিমিনেম

7
এটি বিশেষভাবে কার্যকর নয়। এটি ঠিক কি Controlজন্য বেস বর্গ সব WinForms নিয়ন্ত্রণের ইতিমধ্যে আছে জন্য BeginUpdateএবং EndUpdateপদ্ধতি। আপনার পক্ষে ভারী উত্তোলন করার জন্য এই পদ্ধতিগুলি ব্যবহার করে নিজেই বার্তা প্রেরণ করা আরও ভাল নয় এবং অবশ্যই বিভিন্ন ফলাফল আনতে পারে না।
কোডি গ্রে

13
@ কোডি গ্রে - উদাহরণস্বরূপ টেবিললআউটপ্যানেলগুলিতে বিগনআপডেট নেই।
দ্য ব্লাস্টন

4
আপনার কোডটি নিয়ন্ত্রণটি প্রদর্শিত হওয়ার আগে এই পদ্ধতিগুলিতে কল করা সম্ভব করে দিলে সতর্ক হন - কলটি Control.Handleউইন্ডো হ্যান্ডেলটি তৈরি করতে বাধ্য করবে এবং কার্য সম্পাদনকে প্রভাবিত করতে পারে। উদাহরণস্বরূপ, যদি আপনি কোনও ফর্ম প্রদর্শিত হওয়ার আগে একটি নিয়ন্ত্রণটি সরিয়ে নিয়ে যাচ্ছিলেন, আপনি যদি আগেই এটি কল করেন SuspendDrawing, আপনার পদক্ষেপটি ধীর হবে। সম্ভবত if (!parent.IsHandleCreated) returnউভয় পদ্ধতিতে চেক থাকা উচিত ।
ওটসোদা

53

নীচে এনজি 5000 এর একই সমাধান তবে পি / ইনভোক ব্যবহার করবেন না।

public static class SuspendUpdate
{
    private const int WM_SETREDRAW = 0x000B;

    public static void Suspend(Control control)
    {
        Message msgSuspendUpdate = Message.Create(control.Handle, WM_SETREDRAW, IntPtr.Zero,
            IntPtr.Zero);

        NativeWindow window = NativeWindow.FromHandle(control.Handle);
        window.DefWndProc(ref msgSuspendUpdate);
    }

    public static void Resume(Control control)
    {
        // Create a C "true" boolean as an IntPtr
        IntPtr wparam = new IntPtr(1);
        Message msgResumeUpdate = Message.Create(control.Handle, WM_SETREDRAW, wparam,
            IntPtr.Zero);

        NativeWindow window = NativeWindow.FromHandle(control.Handle);
        window.DefWndProc(ref msgResumeUpdate);

        control.Invalidate();
    }
}

আমি চেষ্টা করেছি, তবে সাসপেন্ড এবং পুনঃসূচনাগুলির মধ্যে মধ্যবর্তী পর্যায়ে, এটি কেবল অবৈধ। এটি অদ্ভুত শোনাতে পারে, তবে ক্ষণস্থায়ী অবস্থায় স্থগিতের আগে এটি কি কেবল তার রাজ্যটি ধরে রাখতে পারে?
ব্যবহারকারী

2
একটি নিয়ন্ত্রণ স্থগিত করার অর্থ হ'ল নিয়ন্ত্রণ অঞ্চলে কোনও অঙ্কন করা হবে না এবং আপনি সেই পৃষ্ঠের অন্যান্য উইন্ডোজ / নিয়ন্ত্রণগুলি থেকে টানা বামন পেতে পারেন। আপনি যদি ডাবলবফারটি সত্য হিসাবে সেট করে একটি নিয়ন্ত্রণ ব্যবহার করার চেষ্টা করতে পারেন তবে যদি আপনি নিয়ন্ত্রণটি পুনরায় চালু না হওয়া অবধি পূর্ববর্তী "স্টেট" আঁকতে চান (তবে যদি আপনি বোঝাতে চেয়েছিলেন) তবে আমি গ্যারান্টি দিতে পারি না যে এটি কার্যকর হবে। যাইহোক আমি মনে করি আপনি এই কৌশলটি ব্যবহার করার বিন্দুটি অনুপস্থিত: এটি ব্যবহারকারীর প্রগতিশীল এবং ধীরে ধীরে অবজেক্টগুলির অঙ্কন (এগুলির সমস্ত একসাথে উপস্থিত হওয়া আরও ভাল) দেখে এড়ানো বোঝানো হয়েছে। অন্যান্য প্রয়োজনে অন্যান্য কৌশল ব্যবহার করুন।
ceztko

4
উত্তম উত্তর, তবে কোথায় Messageএবং কোথায় তা প্রদর্শন করা আরও ভাল NativeWindow; নামের শ্রেণীর জন্য ডকুমেন্টেশন সন্ধান করা Messageযে সমস্ত বিনোদনমূলক তা নয়।
দর্দা

1
@ পেলেসেল ১) স্বয়ংক্রিয় নেমস্পেস আমদানি ব্যবহার করুন (প্রতীকটিতে ক্লিক করুন, ALT + Shift + F10), ২) অবৈধ () দ্বারা আঁকা না হওয়া শিশুরা প্রত্যাশিত আচরণ। আপনার কেবলমাত্র অল্প সময়ের জন্য পিতামাতার নিয়ন্ত্রণ স্থগিত করা উচিত এবং যখন সমস্ত প্রাসঙ্গিক শিশু অবৈধ হয় তখন তা পুনরায় চালু করা উচিত।
ceztko

2
Invalidate()Refresh()যাইহোক এক অনুসরণ না করে যতটা ভাল কাজ করে না ।
ইউজিন রায়বটসেভ

16

আমি সাধারণত এনজিলিঙ্কের উত্তরের কিছুটা পরিবর্তিত সংস্করণ ব্যবহার করি ।

public class MyControl : Control
{
    private int suspendCounter = 0;

    private void SuspendDrawing()
    {
        if(suspendCounter == 0) 
            SendMessage(this.Handle, WM_SETREDRAW, false, 0);
        suspendCounter++;
    }

    private void ResumeDrawing()
    {
        suspendCounter--; 
        if(suspendCounter == 0) 
        {
            SendMessage(this.Handle, WM_SETREDRAW, true, 0);
            this.Refresh();
        }
    }
}

এটি কল স্থগিত / পুনঃসূচনা কলগুলি বাসাতে দেয়। আপনার অবশ্যই একটির SuspendDrawingসাথে প্রতিটিটির সাথে মিলতে হবে তা নিশ্চিত করতে হবে ResumeDrawing। সুতরাং, এগুলি জনসমক্ষে প্রচার করা সম্ভবত কোনও ভাল ধারণা হবে না।


4
এই উভয় কল সুষম রাখতে সাহায্য করে: SuspendDrawing(); try { DrawSomething(); } finally { ResumeDrawing(); }। আরেকটি বিকল্প হ'ল এটি একটি IDisposableশ্রেণিতে প্রয়োগ করা এবং অঙ্কন অংশটি usingস্টেস্টমেন্টে বন্ধ করে দেওয়া। হ্যান্ডেলটি নির্মাণকারীকে দেওয়া হবে, যা অঙ্কন স্থগিত করবে।
অলিভিয়ার জ্যাকট-ডেস্কোম্বেস

পুরানো প্রশ্ন, আমি জানি, কিন্তু "মিথ্যা" পাঠানো সি # / ভিএস এর সাম্প্রতিক সংস্করণগুলিতে কাজ করে না। আমাকে মিথ্যে 0 এবং সত্য 1 এ পরিবর্তন করতে হয়েছিল
মরি মারকোভিটস

@MauryMarkowitz তোমার চলে DllImportঘোষণা wParamযেমন bool?
ওজগুর ওজসিটাক

হাই, এই উত্তরটি নিম্নচাপ দেওয়া একটি দুর্ঘটনা ছিল, দুঃখিত!
জিওফ

13

পুনরায় সক্ষম অঙ্কনটি ভুলে যাওয়ার সাথে সহায়তা করতে:

public static void SuspendDrawing(Control control, Action action)
{
    SendMessage(control.Handle, WM_SETREDRAW, false, 0);
    action();
    SendMessage(control.Handle, WM_SETREDRAW, true, 0);
    control.Refresh();
}

ব্যবহার:

SuspendDrawing(myControl, () =>
{
    somemethod();
});

1
action()ব্যতিক্রম নিক্ষেপ সম্পর্কে কি ? (চেষ্টা করে / শেষ অবধি ব্যবহার করুন)
ডেভিড শেরেট

8

ইন্টারপ ব্যবহার না করে একটি দুর্দান্ত সমাধান:

বরাবরের মতো, কেবল আপনার কাস্টমকন্ট্রোলটিতে ডাবলফারড = সত্য সক্ষম করুন। তারপরে, আপনার যদি ফ্লোএলআউটপ্যানেল বা টেবিললআউটপ্যানেল এর মতো কোনও ধারক থাকে তবে এই ধরণের প্রতিটি থেকে এবং কনস্ট্রাক্টরে ক্লাস নেওয়া, ডাবল বাফারিং সক্ষম করুন। এখন, উইন্ডোজ এর পরিবর্তে আপনার উদ্ভূত কনটেইনারগুলি ব্যবহার করুন ms ফোরামস পাত্রে।

class TableLayoutPanel : System.Windows.Forms.TableLayoutPanel
{
    public TableLayoutPanel()
    {
        DoubleBuffered = true;
    }
}

class FlowLayoutPanel : System.Windows.Forms.FlowLayoutPanel
{
    public FlowLayoutPanel()
    {
        DoubleBuffered = true;
    }
}

2
এটি অবশ্যই একটি দরকারী কৌশল - যা আমি তালিকাভিউগুলির জন্য প্রায়শই ব্যবহার করি - তবে এটি আসলে পুনরায় আঁকাগুলি রোধ করে না; তারা এখনও অফস্ক্রিন ঘটবে।
সাইমন

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

অনপেইন্ট ওভাররাইড করুন।

6

Ng5000 এর উত্তরের ভিত্তিতে, আমি এই এক্সটেনশনটি ব্যবহার করতে পছন্দ করি:

        #region Suspend
        [DllImport("user32.dll")]
        private static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
        private const int WM_SETREDRAW = 11;
        public static IDisposable BeginSuspendlock(this Control ctrl)
        {
            return new suspender(ctrl);
        }
        private class suspender : IDisposable
        {
            private Control _ctrl;
            public suspender(Control ctrl)
            {
                this._ctrl = ctrl;
                SendMessage(this._ctrl.Handle, WM_SETREDRAW, false, 0);
            }
            public void Dispose()
            {
                SendMessage(this._ctrl.Handle, WM_SETREDRAW, true, 0);
                this._ctrl.Refresh();
            }
        }
        #endregion

ব্যবহার করুন:

using (this.BeginSuspendlock())
{
    //update GUI
}

4

পিনভোক ব্যবহার না করে এমন কোনও ভিবি এক্সটেনশান সংস্করণ আনতে এখানে সেজটকো এবং এনজি ৫০০০ এর সংমিশ্রণ রয়েছে

Imports System.Runtime.CompilerServices

Module ControlExtensions

Dim WM_SETREDRAW As Integer = 11

''' <summary>
''' A stronger "SuspendLayout" completely holds the controls painting until ResumePaint is called
''' </summary>
''' <param name="ctrl"></param>
''' <remarks></remarks>
<Extension()>
Public Sub SuspendPaint(ByVal ctrl As Windows.Forms.Control)

    Dim msgSuspendUpdate As Windows.Forms.Message = Windows.Forms.Message.Create(ctrl.Handle, WM_SETREDRAW, System.IntPtr.Zero, System.IntPtr.Zero)

    Dim window As Windows.Forms.NativeWindow = Windows.Forms.NativeWindow.FromHandle(ctrl.Handle)

    window.DefWndProc(msgSuspendUpdate)

End Sub

''' <summary>
''' Resume from SuspendPaint method
''' </summary>
''' <param name="ctrl"></param>
''' <remarks></remarks>
<Extension()>
Public Sub ResumePaint(ByVal ctrl As Windows.Forms.Control)

    Dim wparam As New System.IntPtr(1)
    Dim msgResumeUpdate As Windows.Forms.Message = Windows.Forms.Message.Create(ctrl.Handle, WM_SETREDRAW, wparam, System.IntPtr.Zero)

    Dim window As Windows.Forms.NativeWindow = Windows.Forms.NativeWindow.FromHandle(ctrl.Handle)

    window.DefWndProc(msgResumeUpdate)

    ctrl.Invalidate()

End Sub

End Module

4
আমি ডাব্লু / একটি ডাব্লুপিএফ অ্যাপ্লিকেশনটিতে কাজ করছি যা ডাব্লুপিএফ ফর্মগুলির সাথে অন্তর্নির্মিত উইনফর্মগুলি ব্যবহার করে এবং স্ক্রীন ফ্লিকারের সাথে কাজ করে। এই কোডটি কীভাবে কার্যকর করা উচিত তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি - এটি কি উইনফর্ম বা ডাব্লুপিএফ উইন্ডোতে যাবে? বা এটি কি আমার বিশেষ পরিস্থিতির জন্য উপযুক্ত নয়?
নিখরচায়

3

আমি জানি এটি একটি পুরানো প্রশ্ন, ইতিমধ্যে জবাব দেওয়া হয়েছে, তবে এখানে এটি গ্রহণ করা আমার; আমি একটি আইডিজিপোজযোগ্য হিসাবে আপডেটগুলির স্থগিতাদেশকে রিফ্যাক্টর করেছিলাম - যে বিবৃতিতে আমি বিবৃতিতে চালাতে চাই তা বন্ধ করতে পারি using

class SuspendDrawingUpdate : IDisposable
{
    private const int WM_SETREDRAW = 0x000B;
    private readonly Control _control;
    private readonly NativeWindow _window;

    public SuspendDrawingUpdate(Control control)
    {
        _control = control;

        var msgSuspendUpdate = Message.Create(_control.Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero);

        _window = NativeWindow.FromHandle(_control.Handle);
        _window.DefWndProc(ref msgSuspendUpdate);
    }

    public void Dispose()
    {
        var wparam = new IntPtr(1);  // Create a C "true" boolean as an IntPtr
        var msgResumeUpdate = Message.Create(_control.Handle, WM_SETREDRAW, wparam, IntPtr.Zero);

        _window.DefWndProc(ref msgResumeUpdate);

        _control.Invalidate();
    }
}

2

এটি আরও সহজ এবং সম্ভবত হ্যাকি - যেহেতু আমি এই থ্রেডে প্রচুর জিডিআই পেশী দেখতে পাচ্ছি এবং স্পষ্টতই কিছু নির্দিষ্ট দৃশ্যের জন্য এটি বেশ উপযুক্ত। YMMV

আমার দৃশ্যে Load, আমি "অভিভাবক" ব্যবহারকারীকন্ট্রোল হিসাবে যা উল্লেখ করব তা ব্যবহার করি - এবং ইভেন্টের সময় , আমি কেবলমাত্র পিতামাতার .Controlsসংগ্রহ থেকে পিতামাতার সংগ্রহ থেকে নিয়ন্ত্রণ করতে পারি , এবং পিতামাতারOnPaint এবং সন্তানের সম্পূর্ণ চিত্র আঁকার ক্ষেত্রে যত্ন নেওয়া হয় বিশেষ যে কোনও উপায়ে নিয়ন্ত্রণ করুন .. সম্পূর্ণরূপে সন্তানের পেইন্টের ক্ষমতাগুলি অফলাইনে নেওয়া।

এখন, আমি উইন্ডোজ ফর্মগুলি মুদ্রণের জন্য মাইক গোল্ডের কাছ থেকে এই ধারণার ভিত্তিতে আমার শিশুদের পেইন্টের রুটিনটি একটি এক্সটেনশন পদ্ধতিতে বন্ধ করি ।

লেআউটের লম্ব খণ্ডটি রেন্ডার করতে এখানে আমার একটি উপ-সেট লেবেল প্রয়োজন :

আপনার ভিজ্যুয়াল স্টুডিও আইডির সাধারণ চিত্র

তারপরে, ParentUserControl.Loadইভেন্ট হ্যান্ডলারের এই কোডটি সহ আমি শিশু নিয়ন্ত্রণ আঁকা থেকে মুক্তি পেয়েছি :

Private Sub ParentUserControl_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    SetStyle(ControlStyles.UserPaint, True)
    SetStyle(ControlStyles.AllPaintingInWmPaint, True)

    'exempt this control from standard painting: 
    Me.Controls.Remove(Me.HostedControlToBeRotated) 
End Sub

তারপরে, একই প্যারেন্ট ইউসারকন্ট্রোল-এ, আমরা স্থল থেকে নিয়ন্ত্রণ-থেকে-ম্যানিপুলেটেড রঙ করি:

Protected Overrides Sub OnPaint(e As PaintEventArgs)
    'here, we will custom paint the HostedControlToBeRotated instance...

    'twist rendering mode 90 counter clockwise, and shift rendering over to right-most end 
    e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    e.Graphics.TranslateTransform(Me.Width - Me.HostedControlToBeRotated.Height, Me.Height)
    e.Graphics.RotateTransform(-90)
    MyCompany.Forms.CustomGDI.DrawControlAndChildren(Me.HostedControlToBeRotated, e.Graphics)

    e.Graphics.ResetTransform()
    e.Graphics.Dispose()

    GC.Collect()
End Sub

একবার আপনি কোথাও প্যারেন্ট ইউসারকন্ট্রোল হোস্ট করেন, যেমন একটি উইন্ডোজ ফর্ম - আমি খুঁজে পাচ্ছি যে আমার ভিজ্যুয়াল স্টুডিও 2015 ফর্মটি ডিজাইনের সময় পাশাপাশি রানটাইমের সময় যথাযথভাবে রেন্ডার করে : প্যারেন্ট ইউসারকন্ট্রোল একটি উইন্ডোজ ফর্ম বা অন্য কোনও ব্যবহারকারী নিয়ন্ত্রণে হোস্ট করা হয়েছে

এখন, যেহেতু আমার নির্দিষ্ট কারসাজিটি শিশু নিয়ন্ত্রণ নিয়ন্ত্রণ 90 ডিগ্রি ঘুরিয়ে দেয়, আমি নিশ্চিত যে এই অঞ্চলে সমস্ত হট স্পট এবং ইন্টারঅ্যাক্টিভিটি নষ্ট হয়ে গেছে - তবে, আমি যে সমস্যাটি সমাধান করছিলাম তা হ'ল একটি প্যাকেজ লেবেলের জন্য যা পূর্বরূপ এবং মুদ্রণের প্রয়োজন ছিল, যা আমার পক্ষে ভাল কাজ করেছে।

যদি আমার উদ্দেশ্যমূলক অনাথ নিয়ন্ত্রণের জন্য গরম দাগগুলি এবং নিয়ন্ত্রণ-নেস পুনরায় প্রবর্তনের উপায় থাকে - তবে আমি সেদিন সম্পর্কে জানতে আগ্রহী (এই দৃশ্যের জন্য অবশ্যই নয়, তবে .. কেবল শিখতে)। অবশ্যই, ডাব্লুপিএফ এই জাতীয় ক্রেজিট ওওটিবি সমর্থন করে .. তবে .. আরে .. উইনফর্মস এখনও এত মজা করছে, এমিরাইট?


-4

অথবা শুধু ব্যবহার করুন Control.SuspendLayout()এবং Control.ResumeLayout()


9
লেআউট এবং পেইন্টিং দুটি পৃথক জিনিস: বিন্যাস হ'ল কীভাবে তাদের ধারকগুলিতে শিশু নিয়ন্ত্রণগুলি সাজানো হয়।
ল্যারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.