How to create and add
a Radio List Button in to window application c#?
- As per R & D and in namespace
System.Windows.Forms there no any radio list button control.
Currently windows form only RadioButton control available. Another way to
create group and list of radio buttons using two windows form container like
eg. GroupBox and Panel. All radio buttons we can add inside the group in
windows form.
We can create our own custome radio list button using
following steps:
1.
1 Create Window Application
2.
2. Update
Form name and text as per understanding
3.
3. Right
click on project and go to "Add" => click on "Component"
after that appear a window
4.
4. In this
window select "Component" and write your component/control name and
click on "Add" button.
5.
5. After
creating component display a window of component with option link
"Toolbox" and View the code. For creating methods and events for our
component, we need to click on "switch to code view", here we can
able to right code as per requirement.
We are creating a component for RadioListButton, for it we
need to update .cs file with namespace and import required namespaces...
1.
Class: RadioListButton.CS
2.
Namespace: By default project name as a namespace => namespace
RadioListButton {}
3. By
default class name and inherit class public partial class RadioListButton :
Component{}
a)
Change namespace for it namespace RadioListButton => namespace
System.Windows.Forms b)
Remove Component class as inherit and add/inherit ListBox
public
partial class RadioListButton : Component =>
public partial class RadioListButton : ListBox
After that copy and paste all methods and events code for
RadioListButton.
6. 6. Build your project
7.
7. After
build your project, you can see your component inside the toolbox under your
project name with component eg. RadioListButton Components
8. 8. This component we can use in our project in any
form wherever we required by using drag & drop. After that we can bind the
data with these controls.
Code:
frmRadioListButton.CS [Form]
namespace RadioListButton
{
public partial class frmRadioListButton : Form
{
public frmRadioListButton()
{
InitializeComponent();
var myCountryList = new[] { new { Id = 1, Name = "India" }, new { Id = 2, Name = "Canada" }, new { Id = 2, Name = "USA" }, new { Id = 2, Name = "Singapore" } }.ToList();
RadioListButton.DataSource =
myCountryList;
RadioListButton.DisplayMember = "Name";
RadioListButton.ValueMember = "Id";
}
}
}
---------------------------------------------------------------------------------------------
RadioListButton.CS [Component]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;
namespace System.Windows.Forms
{
public partial class RadioListButton : ListBox
{
Size s;
public RadioListButton()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
using (var g = Graphics.FromHwnd(IntPtr.Zero))
s = RadioButtonRenderer.GetGlyphSize(
Graphics.FromHwnd(IntPtr.Zero), RadioButtonState.CheckedNormal);
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
var text = (Items.Count > 0) ? GetItemText(Items[e.Index])
: Name;
Rectangle r = e.Bounds; Point p;
var flags = TextFormatFlags.Default | TextFormatFlags.NoPrefix;
var selected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
var state = selected ?
(Enabled ? RadioButtonState.CheckedNormal
:
RadioButtonState.CheckedDisabled)
:
(Enabled ? RadioButtonState.UncheckedNormal
:
RadioButtonState.UncheckedDisabled);
if (RightToLeft == System.Windows.Forms.RightToLeft.Yes)
{
p = new Point(r.Right - r.Height +
(ItemHeight - s.Width) / 2,
r.Top + (ItemHeight -
s.Height) / 2);
r = new Rectangle(r.Left, r.Top,
r.Width - r.Height, r.Height);
flags |= TextFormatFlags.RightToLeft
| TextFormatFlags.Right;
}
else
{
p = new Point(r.Left + (ItemHeight -
s.Width) / 2,
r.Top + (ItemHeight - s.Height)
/ 2);
r = new Rectangle(r.Left + r.Height,
r.Top, r.Width - r.Height, r.Height);
}
var bc = selected ? (Enabled ? SystemColors.Highlight :
SystemColors.InactiveBorder) : BackColor;
var fc = selected ? (Enabled ? SystemColors.HighlightText :
SystemColors.GrayText) : ForeColor;
using (var b = new SolidBrush(bc))
e.Graphics.FillRectangle(b,
e.Bounds);
RadioButtonRenderer.DrawRadioButton(e.Graphics, p, state);
TextRenderer.DrawText(e.Graphics, text, Font, r, fc, bc, flags);
e.DrawFocusRectangle();
base.OnDrawItem(e);
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override SelectionMode SelectionMode
{
get { return System.Windows.Forms.SelectionMode.One; }
set { }
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override int ItemHeight
{
get { return (this.Font.Height + 2); }
set { }
}
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override DrawMode DrawMode
{
get { return base.DrawMode; }
set { base.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; }
}
}
}
0 comments:
Post a Comment