Hello guys,
Today I am sharing my experience to move parent and child
window together. Suppose you have a parent window and on the top of that one
child window you need to open.
Now if you move parent window then child must be move
together.
Another thing child must be shown under the parent window
area. Whenever you move or resize the parent window, the child window must not
leave its position. That is the primary requirement.
In Window:
Create one project in that you will get one main form. Open
that form and add one button. Now double click on button, so you’ll get its
button click event. Now insert the below code to achieve our goal.
private void
button1_Click(object sender, EventArgs e)
{
Form mainWindow = Form.ActiveForm;
Form wnd = new Form();
wnd.Height = 30;
wnd.Width = mainWindow.Width;
wnd.Top = (mainWindow.Top + mainWindow.Height) - 50;
wnd.Left = mainWindow.Left; //0;
wnd.FormBorderStyle = FormBorderStyle.None;
wnd.Name = "hi";
wnd.Owner = mainWindow;
wnd.ShowInTaskbar = false;
wnd.BackColor = Color.Red;
wnd.StartPosition = FormStartPosition.Manual;
Label lbl = new Label();
lbl.Text = "lasjdflaj lk asldfj alsk
fd;las dfasldjf aslkfj las;kjdf l;aks dflas fd";
wnd.Controls.Add(lbl);
wnd.Show();
}
No insert the below code.
public Form1()
{
InitializeComponent();
this.SizeChanged += new
EventHandler(Window_SizeChanged);
this.LocationChanged += new
EventHandler(Window_LocationChanged);
}
private void
Window_SizeChanged(object sender, EventArgs e)
{
ChildRelocate(); }
private void
Window_LocationChanged(object sender, EventArgs e)
{
ChildRelocate(); }
private void
ChildRelocate()
{
foreach (Form item
in Application.OpenForms)
{
if (item.Name == "hi")
{
Form mainWindow = Form.ActiveForm;
item.Width = mainWindow.Width;
item.Top = (mainWindow.Top + mainWindow.Height) - 50;
item.Left = mainWindow.Left;
item.StartPosition = FormStartPosition.Manual;
mainWindow = null;
}
}
}
In WPF:
Same as window create on project in wpf and follow the
instructions.
You’ll get one main form and in that add one button and
create its click event.
Now insert the below code.
public MainWindow()
{
InitializeComponent();
SizeChanged += new SizeChangedEventHandler(Window_SizeChanged);
StateChanged += new EventHandler(Window_StateChanged);
LocationChanged += new EventHandler(Window_LocationChanged);
}
private void
btnMarquee_Click(object sender, RoutedEventArgs e)
{
//Marquee marquee = new Marquee();
//marquee.ShowDialog();
Window mainWindow = Application.Current.MainWindow;
Window wnd = new Window();
Grid grid = new Grid();
wnd.Height = 30;
wnd.Width = mainWindow.Width;
wnd.Top = (mainWindow.Top + mainWindow.Height) - 50;
wnd.Left = mainWindow.Left;
wnd.WindowStyle = System.Windows.WindowStyle.None;
wnd.AllowsTransparency = true;
wnd.Content = grid;
wnd.Title = "hi";
wnd.Owner = this;
wnd.ShowInTaskbar = false;
System.Windows.Controls.Canvas cn = new Canvas();
cn.Background = Brushes.Red;
cn.Height = 30;
System.Windows.Controls.TextBlock
txtMarqee = new TextBlock();
txtMarqee.FontSize = 20;
cn.Children.Add(txtMarqee);
txtMarqee.Text = "This is basic example
of marquee This is basic example of marquee This is basic example of
marquee";
DoubleAnimation doubleAnimation = new DoubleAnimation();
doubleAnimation.From = -(System.Windows.SystemParameters.PrimaryScreenWidth);
doubleAnimation.To = System.Windows.SystemParameters.PrimaryScreenWidth;
doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(15));
txtMarqee.BeginAnimation(Canvas.RightProperty,
doubleAnimation);
grid.Children.Add(cn);
wnd.Show();
}
private void
Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
ChildRelocate(); }
private void
Window_StateChanged(object sender, EventArgs e)
{
ChildRelocate(); }
private void Window_LocationChanged(object
sender, EventArgs e)
{
ChildRelocate(); }
private void
ChildRelocate()
{
foreach (Window
item in System.Windows.Application.Current.Windows)
{
if (item.Title == "hi")
{
Window mainWindow = Application.Current.MainWindow;
item.Width = mainWindow.Width;
item.Top = (mainWindow.Top + mainWindow.Height) - 50;
item.Left = mainWindow.Left;
mainWindow = null;
}
}
}
In WPF I have created an example which is similar to marqee
in HTML.
Enjoy guys. Happy coading…