আমি আমার অগ্রগতি বারে দুটি জিনিস করতে চাই।
- সবুজ রঙকে লালচে পরিবর্তন করুন।
- ব্লকগুলি সরান এবং এটি একটি রঙে তৈরি করুন।
এই দুটি জিনিস সম্পর্কে যে কোনও তথ্য আমি কীভাবে অর্জন করব তা অবাক করে কীভাবে গ্রেপ্তার করা হবে!
ধন্যবাদ
আমি আমার অগ্রগতি বারে দুটি জিনিস করতে চাই।
এই দুটি জিনিস সম্পর্কে যে কোনও তথ্য আমি কীভাবে অর্জন করব তা অবাক করে কীভাবে গ্রেপ্তার করা হবে!
ধন্যবাদ
উত্তর:
যেহেতু পূর্ববর্তী উত্তরগুলি ভিজ্যুয়াল স্টাইলগুলির সাথে কাজ করে না। আপনাকে সম্ভবত নিজের শ্রেণি তৈরি করতে হবে বা অগ্রগতি বারটি প্রসারিত করতে হবে:
public class NewProgressBar : ProgressBar
{
public NewProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rec = e.ClipRectangle;
rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
if(ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
rec.Height = rec.Height - 4;
e.Graphics.FillRectangle(Brushes.Red, 2, 2, rec.Width, rec.Height);
}
}
সম্পাদনা: প্রগতি বারটিকে পটভূমির জন্য ভিজ্যুয়াল স্টাইলটি ব্যবহার করতে আপডেট কোড
ঠিক আছে, সমস্ত উত্তর এবং লিঙ্কগুলি পড়তে আমার কিছুটা সময় লেগেছে। আমি সেগুলি থেকে যা পেয়েছি তা এখানে:
নমুনা ফলাফল
গৃহীত উত্তরটি ভিজ্যুয়াল শৈলীগুলিকে অক্ষম করে, এটি আপনাকে যে কোনও কিছুতে রঙ সেট করার অনুমতি দেয়, তবে ফলাফলটি সহজ দেখাচ্ছে:
নিম্নলিখিত পদ্ধতিটি ব্যবহার করে আপনি এর পরিবর্তে এরকম কিছু পেতে পারেন:
কিভাবে
প্রথমে এটি অন্তর্ভুক্ত করুন যদি আপনার না থাকে: using System.Runtime.InteropServices;
দ্বিতীয়ত, আপনি হয় এই নতুন শ্রেণিটি তৈরি করতে পারেন, বা এর কোডটি বিদ্যমান static
নন-জেনেরিক শ্রেণিতে স্থাপন করতে পারেন:
public static class ModifyProgressBarColor
{
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l);
public static void SetState(this ProgressBar pBar, int state)
{
SendMessage(pBar.Handle, 1040, (IntPtr)state, IntPtr.Zero);
}
}
এখন, এটি ব্যবহার করতে, কেবল কল করুন:
progressBar1.SetState(2);
সেটস্টেটে দ্বিতীয় প্যারামিটারটি নোট করুন, 1 = স্বাভাবিক (সবুজ); 2 = ত্রুটি (লাল); 3 = সতর্কতা (হলুদ)।
আশা করি এটা সাহায্য করবে!
public const uint PBM_SETSTATE = 0x0410; // 1040
এটি সর্বাধিক গৃহীত কোডের ঝাঁকুনামুক্ত সংস্করণ যা আপনি এই প্রশ্নের উত্তর হিসাবে পেতে পারেন। এই জঘন্য উত্তরের পোস্টারগুলিতে সমস্ত কৃতিত্ব। ধন্যবাদ ডাস্টি, ক্রিস, ম্যাট এবং জোশ!
মন্তব্যের একটিতে "জ্বালানীর" অনুরোধের মতো, আমারও এমন সংস্করণ দরকার যা কিছুটা আরও পেশাদার ... এই কোডটি আগের কোডগুলির মতো স্টাইলগুলি বজায় রাখে তবে একটি অফস্ক্রিন চিত্র সরবরাহ করে এবং গ্রাফিক্স বাফারিং যোগ করে (এবং গ্রাফিক্সের অবজেক্টটি সঠিকভাবে নিষ্পত্তি করে)।
ফলাফল: সমস্ত ভাল, এবং কোন ঝাঁকুনি। :)
public class NewProgressBar : ProgressBar
{
public NewProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// None... Helps control the flicker.
}
protected override void OnPaint(PaintEventArgs e)
{
const int inset = 2; // A single inset value to control teh sizing of the inner rect.
using (Image offscreenImage = new Bitmap(this.Width, this.Height))
{
using (Graphics offscreen = Graphics.FromImage(offscreenImage))
{
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(offscreen, rect);
rect.Inflate(new Size(-inset, -inset)); // Deflate inner rect.
rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum));
if (rect.Width == 0) rect.Width = 1; // Can't draw rec with width of 0.
LinearGradientBrush brush = new LinearGradientBrush(rect, this.BackColor, this.ForeColor, LinearGradientMode.Vertical);
offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height);
e.Graphics.DrawImage(offscreenImage, 0, 0);
}
}
}
}
ডিজাইনারে, আপনার পছন্দসই রঙে আপনার কেবল রঙের সম্পত্তি সেট করতে হবে। রেডের ক্ষেত্রে এটির জন্য পূর্বনির্ধারিত রঙ রয়েছে।
কোডে এটি করতে (সি #) এটি করুন:
pgs.ForeColor = Color.Red;
সম্পাদনা : ওঁ হ্যাঁ, স্টাইলকে ধারাবাহিকভাবে সেট করুন। কোডে, এর মতো:
pgs.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
অন্য সম্পাদনা: আপনাকে Application.EnableVisualStyles()
আপনার Program.cs
(বা অনুরূপ) থেকে পড়া লাইনটিও সরিয়ে ফেলতে হবে । আপনি যদি এইটি করতে না পারেন কারণ আপনি বাকী অ্যাপ্লিকেশনটি ভিজ্যুয়াল শৈলীযুক্ত করতে চান, তবে আমি নিজেই নিয়ন্ত্রণটি আঁকতে বা ডাব্লুপিএফ এ যাওয়ার পরামর্শ দেব কারণ এই জাতীয় জিনিসটি ডাব্লুপিএফ দিয়ে সহজ হয়। কোডপ্লেক্সে একটি অগ্রগতি বার অঙ্কনের মালিকের একটি টিউটোরিয়াল আপনি খুঁজে পেতে পারেন
ম্যাট ব্লেইন এবং ক্রিস পার্সেচেটির উত্তরগুলি ব্যবহার করে আমি একটি প্রগতি বার তৈরি করেছি যা অসীম রঙ পছন্দ করার সময় কিছুটা সুন্দর দেখায় (মূলত আমি ম্যাট এর সমাধানে একটি লাইন পরিবর্তন করেছি):
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace QuantumConcepts.Common.Forms.UI.Controls
{
public class ProgressBarEx : ProgressBar
{
public ProgressBarEx()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
LinearGradientBrush brush = null;
Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
double scaleFactor = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum));
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rec);
rec.Width = (int)((rec.Width * scaleFactor) - 4);
rec.Height -= 4;
brush = new LinearGradientBrush(rec, this.ForeColor, this.BackColor, LinearGradientMode.Vertical);
e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height);
}
}
}
progressBar.ForeColor = Color.FromArgb(255, 0, 0);
progressBar.BackColor = Color.FromArgb(150, 0, 0);
https://skydrive.live.com/?cid=0EDE5D21BDC5F270&id=EDE5D21BDC5F270%21160&sc=documents#
LinearGradientBrush
পরে রেক প্রস্থকে 0 হিসাবে পড়ার কারণে ত্রুটিযুক্ত হয়ে যাবে Eas প্যানেল বা প্যাডিং সহ কিছু (যদি আপনি কোনও সীমানা চান) এবং তৈরি rec.Width = (int)((rec.Width * scaleFactor) - 4)
করেrec.Width = (int)(rec.Width * scaleFactor) + 1
মোডিফিকন টু ডাস্টিবারওয়েলের উত্তর। (আমি নিজে এটি সম্পাদনা করার মতো পর্যাপ্ত প্রতিনিধি নেই)) তার উত্তরের মতো এটি "ভিজ্যুয়াল স্টাইলস" সক্ষম করেও কাজ করে। আপনি কেবলমাত্র ফর্মের ডিজাইন দৃশ্যে প্রগতি বারের ফোরকলার সম্পত্তি সেট করতে পারেন।
using System;
using System.Windows.Forms;
using System.Drawing;
public class ProgressBarEx : ProgressBar
{
private SolidBrush brush = null;
public ProgressBarEx()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
if (brush == null || brush.Color != this.ForeColor)
brush = new SolidBrush(this.ForeColor);
Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rec);
rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
rec.Height = rec.Height - 4;
e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height);
}
}
আমি এটিকে কেবল একটি স্ট্যাটিক ক্লাসে রেখেছি।
const int WM_USER = 0x400;
const int PBM_SETSTATE = WM_USER + 16;
const int PBM_GETSTATE = WM_USER + 17;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public enum ProgressBarStateEnum : int
{
Normal = 1,
Error = 2,
Paused = 3,
}
public static ProgressBarStateEnum GetState(this ProgressBar pBar)
{
return (ProgressBarStateEnum)(int)SendMessage(pBar.Handle, PBM_GETSTATE, IntPtr.Zero, IntPtr.Zero);
}
public static void SetState(this ProgressBar pBar, ProgressBarStateEnum state)
{
SendMessage(pBar.Handle, PBM_SETSTATE, (IntPtr)state, IntPtr.Zero);
}
আশা করি এটা সাহায্য করবে,
মার্ক
সাধারণত অগ্রগতি বার হয় থিমযুক্ত বা ব্যবহারকারীর রঙ পছন্দগুলি সম্মান করে। রঙ পরিবর্তন করার জন্য আপনাকে হয় ভিজ্যুয়াল শৈলীগুলি বন্ধ করতে হবে এবং ForeColor
নিজেই নিয়ন্ত্রণ সেট করতে হবে বা আঁকতে হবে।
ব্লকগুলির পরিবর্তে অবিচ্ছিন্ন শৈলীর জন্য আপনি Style
সম্পত্তি সেট করতে পারেন :
pBar.Style = ProgressBarStyle.Continuous;
সম্পাদনা
জিনিসগুলির শব্দে আপনি এক্সপি থিম ব্যবহার করছেন যা গ্রিন ব্লক ভিত্তিক প্রগ-বার রয়েছে। আপনার ইউআই স্টাইলটি উইন্ডোজ ক্লাসিকের কাছে উল্টানোর চেষ্টা করুন এবং আবার পরীক্ষা করুন, তবে আপনার সমস্ত ইউআই স্টাইল জুড়ে যা চান তা করতে আপনার নিজের অনপেন্ট ইভেন্টটি প্রয়োগ করতে হতে পারে
বা অন্য কেউ যেমন উল্লেখ করেছেন, আপনার আবেদনের জন্য ভিজ্যুয়াল স্টাইলগুলি অক্ষম করুন।
আসল
আমি যতদূর জানি, প্রগ্রেস বারের রেন্ডারিং আপনি যে উইন্ডোজ থিম স্টাইলটি বেছে নিয়েছেন তার সাথে ইনলাইনে ঘটে (উইন 2 কে, এক্সপি, ভিস্তা)
আপনি সম্পত্তি সেট করে রঙ পরিবর্তন করতে পারেন
ProgressBar.ForeColor
আমি নিশ্চিত না যে আপনি তবে আরও অনেক কিছু করতে পারবেন ...
কিছু googling না
এমএস কেবি থেকে একটি "স্মুথ" অগ্রগতি বার তৈরির বিষয়ে একটি নিবন্ধ এখানে রয়েছে
বার্তা PBM_SETBARCOLOR ব্যবহার করে দেখুন, সেন্ডমেসেজের সাহায্যে কৌশলটি করা উচিত
উদাহরণস্বরূপ http://www.vbforums.com/showthread.php?t=248721 দেখুন ।
এই সমস্ত পদ্ধতিগুলি আমার পক্ষে কাজ করতে ব্যর্থ হয়েছে তবে এই পদ্ধতিটি আপনাকে এটি রঙিন স্ট্রিংয়ে পরিবর্তন করতে দেয়।
দয়া করে নোট করুন যে আমি স্ট্যাকওভারফ্লোতে অন্য কোথাও থেকে এই কোডটি পেয়েছি এবং এটি একটু পরিবর্তন করেছি। আমি এই কোডটি কোথায় পেয়েছি তা ভুলে গিয়েছি এবং এর জন্য দুঃখিত হওয়ায় আমি এটি লিঙ্ক করতে পারছি না।
তবে যাইহোক আমি আশা করি এই কোডটি এমন কাউকে সহায়তা করবে যা এটি আমাকে সত্যই সহায়তা করেছিল।
private void ProgressBar_MouseDown(object sender, MouseButtonEventArgs e)
{
var converter = new System.Windows.Media.BrushConverter();
var brush = (Brush)converter.ConvertFromString("#FFB6D301");
ProgressBar.Foreground = brush;
}
যেখানে "প্রগতিবার" নামটি ব্যবহার করা হয় আপনার নিজের অগ্রগতির বারের নামের সাথে প্রতিস্থাপন করুন। আপনি অন্যান্য আর্গুমেন্টের সাহায্যেও এই ইভেন্টটি ট্রিগার করতে পারেন কেবল এটির ভিতরে বন্ধনী কোথাও নিশ্চিত করুন।
পরিবর্তন Color
এবং Value
(তাত্ক্ষণিক পরিবর্তন)
using System.Runtime.InteropServices;
শীর্ষে রাখুন ...
সাথে কল ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue);
আমি লক্ষ্য করেছি যে আপনি যদি বারটির মান পরিবর্তন করেন (এটি কত বড়) তবে এটি ডিফল্ট সবুজ ছাড়া অন্য কোনও রঙে থাকলে পরিবর্তন হবে না। আমি ব্যবহারকারীর 1032613 এর কোড নিয়েছি এবং একটি মান বিকল্প যুক্ত করেছি।
public static class ColorBar
{
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l);
public enum Color { None, Green, Red, Yellow }
public static void SetState(this ProgressBar pBar, Color newColor, int newValue)
{
if (pBar.Value == pBar.Minimum) // If it has not been painted yet, paint the whole thing using defualt color...
{ // Max move is instant and this keeps the initial move from going out slowly
pBar.Value = pBar.Maximum; // in wrong color on first painting
SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero);
}
pBar.Value = newValue;
SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero); // run it out to the correct spot in default
SendMessage(pBar.Handle, 1040, (IntPtr)(int)newColor, IntPtr.Zero); // now turn it the correct color
}
}
pBar.Value = pBar.Maximum;
এবং SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero);
উন্নতি সঠিক নতুন রঙ দেখানো হবে তার জন্য শর্ত শরীরের ভেতরে।
যদি কেউ অন্য বিকল্পের সন্ধান করে তবে .... আপনি একটি প্যানেল প্রসারিত করতে পারেন, এটি ব্যাকগ্রাউন্ড হিসাবে ব্যবহার করতে পারেন (সাদা বা যাই হোক না কেন), অগ্রভাগের জন্য (চলন্ত বার) জন্য এর ভিতরে আরও একটি প্যানেল যুক্ত করতে পারেন। তারপরে আপনার রং নিয়ন্ত্রণ করা ইত্যাদি সম্পূর্ণ নিয়ন্ত্রণ রয়েছে etc.
ভিজ্যুয়াল বেসিক সলিউশন এক্সপ্লোরার (যেখানে আপনার ভিবি ফাইলগুলি আছে) আপনার প্রকল্পে কেবল ডান ক্লিক করুন এবং মেনু থেকে বৈশিষ্ট্যগুলি নির্বাচন করুন। উইন্ডোটিতে পপ আপ হয়েছে "এক্সপি ভিজ্যুয়াল স্টাইলগুলি সক্ষম করুন" নির্বাচন করুন এবং এখন আপনি পূর্বসূরী সেট করার পরে এটি এখনই কাজ করা উচিত।
।: উদ্ধৃতি: সাধারণত অগ্রগতি বার হয় থিমযুক্ত বা ব্যবহারকারীর রঙ পছন্দগুলি সম্মান করে। রঙ পরিবর্তন করার জন্য আপনাকে হয় ভিজ্যুয়াল শৈলীগুলি বন্ধ করতে হবে এবং ForeColor
নিজেই নিয়ন্ত্রণ সেট করতে হবে বা আঁকতে হবে।
ব্লকগুলির পরিবর্তে অবিচ্ছিন্ন শৈলীর জন্য আপনি Style
সম্পত্তি সেট করতে পারেন :
pBar.Style = ProgressBarStyle.Continuous;
প্রগতিবার্টিস্টাইল.নির্ভর বনাম ব্লকগুলি ভার্চুয়াল স্টাইলস সক্ষম করে অকেজো ...
ব্লক (গুলি) কেবলমাত্র ভিজ্যুয়াল শৈলীর সাথে অক্ষম থাকবে ... যা এই সমস্তগুলিকে একটি মোড পয়েন্ট সরবরাহ করে (কাস্টম অগ্রগতির রঙের সাথে) ভার্চুয়াল শৈলীগুলি অক্ষম করে ... অগ্রগতির বারটি পূর্বাভাসের ভিত্তিতে রঙিন করা উচিত।
আমি উইলিয়াম ড্যানিয়েলের উত্তরের সংমিশ্রণটি ব্যবহার করেছি (ভিজ্যুয়াল শৈলীর সাথে সক্ষম, সুতরাং ফোরকালারটি কেবল কোনও স্টাইল ছাড়াই সমতল হবে না) এবং ব্যারিয়ের উত্তর (অগ্রগতি বারে কাস্টম পাঠ্যে) থেকে: আমি কীভাবে প্রগতিবারে পাঠ্য রাখি?
লাল রঙের নিচে উল্লম্ব বার ইউপি:
using System;
using System.Windows.Forms;
using System.Drawing;
public class VerticalProgressBar : ProgressBar
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;
return cp;
}
}
private SolidBrush brush = null;
public VerticalProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
if (brush == null || brush.Color != this.ForeColor)
brush = new SolidBrush(this.ForeColor);
Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawVerticalBar(e.Graphics, rec);
rec.Height = (int)(rec.Height * ((double)Value / Maximum)) - 4;
rec.Width = rec.Width - 4;
e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height);
}
}
ডাব্লুএক্সপি ভিজ্যুয়াল স্টাইলের উত্তরগুলির সম্মান করে এমন ভিবি.নেট রঙিন প্রগতিবারটি হ'ল ...
আমি উত্তরটি 3/17/12 এ '101032613 'দিয়ে শুরু করেছি। মনে রাখবেন এটি এখন একটি মডিউল, কোনও শ্রেণি নয়। সেখান থেকে আমি কোডটি রূপান্তর করেছি তবে আরও বেশি প্রয়োজন ছিল। বিশেষত রূপান্তরিত কোডটি 'স্টেট' পূর্ণসংখ্যাকে কোনও ইন্টারপ্রেটার ধরণের রূপান্তর করতে একটি ডাইরেক্টকাস্ট ফাংশন দেখায় যা কাজ করে না।
Imports System.Runtime.InteropServices
Public Module ModifyProgressBarColor
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
Private Function SendMessage(hWnd As IntPtr, Msg As UInteger, w As IntPtr, l As IntPtr) As IntPtr
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Sub SetState(pBar As ProgressBar, state As Integer)
'-- Convert state as integer to type IntPtr
Dim s As IntPtr
Dim y As Integer = state
s = IntPtr.op_Explicit(y)
'-- Modify bar color
SendMessage(pBar.Handle, 1040, s, IntPtr.Zero)
End Sub
End Module
এবং আবার এই লাইন সহ ইউজিং কোডটিতে এটি কল করুন:
Call ModifyProgressBarColor.SetState(prb, 2)
বিটিডাব্লু - আমি অন্যান্য রঙগুলি চেষ্টা করেছি - 0, 4, 5 - এগুলি কেবল সবুজ প্রদর্শিত হয়েছে।
আমি জানি এখনই উত্তর দেওয়া তার পক্ষে অনেক পুরানো .. তবে তবুও, শূন্য মূল্যবান অগ্রগতি বারটি না দেখানোর সমস্যাটি সংশোধন করার জন্য @ ড্যানিয়েলের জবাবটিতে একটি ছোট্ট টুইট । অভ্যন্তরের আয়তক্ষেত্রের প্রস্থটি শূন্য-শরীয়ত হিসাবে পাওয়া গেলে কেবল অগ্রগতিটি আঁকুন।
সমস্ত অবদানকারীকে ধন্যবাদ।
public class ProgressBarEx : ProgressBar
{
public ProgressBarEx()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent){}
// None... Helps control the flicker.
protected override void OnPaint(PaintEventArgs e)
{
const int inset = 2; // A single inset value to control teh sizing of the inner rect.
using (Image offscreenImage = new Bitmap(this.Width, this.Height))
{
using (Graphics offscreen = Graphics.FromImage(offscreenImage))
{
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(offscreen, rect);
rect.Inflate(new Size(-inset, -inset)); // Deflate inner rect.
rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum));
if (rect.Width != 0)
{
LinearGradientBrush brush = new LinearGradientBrush(rect, this.ForeColor, this.BackColor, LinearGradientMode.Vertical);
offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height);
e.Graphics.DrawImage(offscreenImage, 0, 0);
offscreenImage.Dispose();
}
}
}
}
}
আমি দেখেছি এটি অগ্রগতি বারের মধ্যে একটি আয়তক্ষেত্র অঙ্কন করে এবং অগ্রগতির বর্তমান মান অনুসারে এর প্রস্থ নির্ধারণ করে করা যেতে পারে। আমি ডান থেকে বাম অগ্রগতির জন্য সমর্থনও যুক্ত করেছি। এইভাবে আপনাকে চিত্রটি ব্যবহার করার দরকার নেই এবং যেহেতু রেক্টনালজ।আইনফ্লেটকে টানা আয়তক্ষেত্রটি ছোট বলা হয় না।
public partial class CFProgressBar : ProgressBar
{
public CFProgressBar()
{
InitializeComponent();
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent) { }
protected override void OnPaint(PaintEventArgs e)
{
double scaleFactor = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum));
int currentWidth = (int)((double)Width * scaleFactor);
Rectangle rect;
if (this.RightToLeftLayout)
{
int currentX = Width - currentWidth;
rect = new Rectangle(currentX, 0, this.Width, this.Height);
}
else
rect = new Rectangle(0, 0, currentWidth, this.Height);
if (rect.Width != 0)
{
SolidBrush sBrush = new SolidBrush(ForeColor);
e.Graphics.FillRectangle(sBrush, rect);
}
}
}
আমি মনে করি সবার সহজ সমাধান, এটি কেবলমাত্র একটি দ্রুত সমাধান, তবে আপনি অ্যাপ্লিকেশনটি মুছতে, মন্তব্য করতে পারেন Program প্রোগ্রাম.সি থেকে উইনজিয়াল স্টাইলস () সক্ষম করুন, বা তবে আপনার অংশটির নাম মূল ফাংশন রয়েছে containing এর পরে আপনি প্রগতি বারের মাধ্যমে অগ্রগতি বারকে নির্বিঘ্নে রঙিন রঙ পরিবর্তন করতে পারেন Color
static void Main()
{
//Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
সম্পাদনা করুন: দুটি মিনুয়েটে এটি আমাকে বনাম আগুন লাগিয়ে তুলতে এবং সিনট্যাক্সটি পরীক্ষা করতে আমাকে আরও ভাল প্রতিক্রিয়া জানায় beaten আমি এই সাইটটি ভালবাসি
progressBar1 = new ProgressBar();
progressBar1.ForeColor = Color.Red;