|
Hello,
i have a little problem with my application. I'll try to describe as simple and organised as I can.
Objective:
I have two user controls in my main form. I've linked them with a simple line that updates (refresh the form) when one of the user controls was moved.
I want the user of my application to move (with the mouse) one of the user controls, that I've created, in the main form.
The user controls are added directly to the main form like this: this.Control.Add(uc1); .
Problem:
The problem is when the user move one of the user controls.
The refresh/redraw of the form loses the line partialy or absolute. Sometimes the line is visible, sometimes it isn't.
I have NO PROBLEM with the algorithm. It's a simple 2D line. I draw the line in the Paint event of the main form.
Observations:
1. I've tryed to draw on a panel, the result was the same.
2. I've tryed setting the DoubleBuffered property to TRUE, the result was the same.
3. I've observe that pictureBox control donsen't have this problem. I've tested with a simple "line tracking the mouse" application and seen that there is no problem when redrawing.
So my next question was:
- Can I draw/use/add an user control on a pictureBox control? or a better way to draw GDI+ on Windows Forms to get rid of this redrawing problem?
I've tryed to add the user controls in the pictureBox control but they didn't appear.
Thank you!
Alex M.
|
|
|
|
|
Try adding Control.Parent.Invalidate() when you move your control. That way the line should be re-drawn.
You can't add the controls to a PictureBox - it isn't a container and doesn't know what to do with them.
You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
Thank you for you're quick reply!
I've read about pictureBox and see that isn't a container. So it was a foolish from me to try adding a user control to a pictureBox control.
I've tryed to Refresh()/Invalidate() + Update() method(s) when I move one of the user control, but the result is still the same.
To be more clear, see my code:
DesenTabel t1, t2;
private void AddUserControls()
{
t1 = new DesenTabel();
t2 = new DesenTabel();
this.Controls.Add(t1);
this.Controls.Add(t2);
}
private void Form_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Black)), t1.Location, t2.Location);
}
private void t1_Move(object sender, EventArgs e)
{
this.Invalidate();
this.Update();
}
private void t2_Move(object sender, EventArgs e)
{
this.Invalidate();
this.Update();
}
The line isn't drawing well. It intrerupts on the way of linking the two tables because of the redraw!
How can I get rid of this problem ?
Thank you!
Alex M.
|
|
|
|
|
private void AddUserControls()
{
t1 = new DesenTabel();
t2 = new DesenTabel();
this.Controls.Add(t1);
this.Controls.Add(t2);
} Is your problem: add
t1.Move += new EventHandler(node_Move);
t2.Move += new EventHandler(node_Move);
...
void node_Move(object sender, EventArgs e)
{
Invalidate();
} to tie the Move event to the handlers...
You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
I've debugged my application and the events are working fine. The move event for re-drawing is triggered.
I've modifyed and simplyfied the AddUserControls method to be more clear to you. The events exists! My mistake for not showing that.
Probably I need to make a canvas to add custom shapes and controls on it, but I still hope this isn't the answer
Thank you!
|
|
|
|
|
Usually, it makes more sense to create a line control. or use VisualBasic PowerPack to add a LineShape. Or the best of all, draw all on a canvas.
What OriginalGriff suggested will work but will have too much flickering. Also, the line will only be drawn when you have finished moving the control.
Atleast my experience has been troublesome so far.
|
|
|
|
|
Hi,
i'll try drawing all to a canvas, in order to make all go nice and well. I'll bring back news!
Cheer's!
Alex M.
|
|
|
|
|
Alex Manolescu wrote: I'll bring back news!
All the best.
|
|
|
|
|
how to fill a standard list dictionary <> from a text file????
Dictionary<int, Customer> customers = new Dictionary<int, Customer>();
Customer cust1 = new Customer();
customers.Add(cust1.ID, cust1);
customers.Add(cust2.ID, cust1);
customers.Add(cust3.ID, cust1);
and what is the other command to read and write in a small file size to share filestream????
|
|
|
|
|
membre123 wrote: how to fill a standard list dictionary <> from a text file????
You will need to parse your text file to get a key value pair and then add them to your dictionary.
Using an xml file for this might actually be better than a text file.
To read and write a file, you should go to msdn.
|
|
|
|
|
thank you for your answer, if you can give me a quick example to analyze the file, and thank you, please I really need it
|
|
|
|
|
You will need to write your own logic for this (once you decide on the structure of your text file).
|
|
|
|
|
membre123 wrote: how to fill a standard list dictionary <> from a text file????
Here's a little sample - it has no error handling or anything nice about it.
using System;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication1
{
class Customer
{
public int ID;
public string name;
}
class Program
{
static void Main(string[] args)
{
var Customers = new Dictionary<int, Customer>();
using (StreamReader fs = new StreamReader(@"C:\Stuff\theInputFile.txt"))
{
string dataLine;
while ((dataLine = fs.ReadLine()) != null)
{
string[] s = dataLine.Split(',');
int id = int.Parse(s[0]);
Customer c = new Customer();
c.ID = id;
c.name = s[1].Trim();
Customers.Add(c.ID, c);
}
}
foreach (var item in Customers)
{
Console.WriteLine("ID: {0} Customer {1}", item.Key, item.Value.name );
}
Console.ReadLine();
}
}
}
What you have to do depends entirely on the declaration for Customer and the layout of the input file.
My input file looks like this:
1, Jet Black
2, Hugh Cornwell
3, Joe Strummer
4, Sid Vicious
membre123 wrote: and what is the other command to read and write in a small file size to share filestream????
I don't know what this means.
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|
|
think you very mutch, that what's i need 
|
|
|
|
|
Hi all,
Can anybody provide me the regex to replace the '&' with '&' but the '&' character in word like '&','<' '>' etc shoud be ignored.
Frankly speaking I am weak in regular expression.
I would be highly thankful if somebody provide me the good learning articles on this.
Thanks
Rohit
|
|
|
|
|
It's not too complex, if you do it via a MatchEvaluator, as you will probably have to examine each case of '&' in context:
Regex regexWithAllPossible = new Regex(@"(>|<|&|&)");
string result = regexWithAllPossible.Replace(source, new MatchEvaluator(CheckMatch));
...
private string CheckMatch(Match m)
{
if (m.Value == "&")
{
return "&";
}
return m.Value;
} Remember to list all the possibilities in the regex!
Get a copy of Expresso[^] - it decodes, creates, and tests regexs! It's free and really helps.
You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
Thanks dear, you really did a great job for me.
I will definately look into expresso.
|
|
|
|
|
You are welcome!
Expresso is a good piece of kit - I've been using it for about a year and really wish I'd written it.
You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
Hello friends
I have a messaging system that uses p2p. Each peer has a incoming message list and a outgoing message list.
What I need to do is whenever a new peer will join the mesh he will get the all the incoming messages from other peers and add those into it's own incoming message list. Now I know when I get the other peer info from I can ask them to give their own list to me. But I'm not finding the way how..?
Any suggestion on this or help would be highly appreciated. I'm giving my code below.
Thanking in Advance
Johnny
#region Instance Fields
private string strOrigin = "";
private string m_Member;
private IServerChannel m_participant;
private InstanceContext m_site;
private NetPeerTcpBinding m_binding;
private ChannelFactory<IServerChannel> m_channelFactory;
private IOnlineStatus o_statusHandler;
private delegate void NoArgDelegate();
private IUserService userService;
ObservableCollection<AppLoginInstance> appLoginInstances;
ObservableCollection<MessageType> inComingMessageTypes;
ObservableCollection<PDCL.ERP.DataModels.Message> outGoingMessages;
ObservableCollection<PDCL.ERP.DataModels.Message> inComingMessages;
private readonly IEventAggregator eventAggregator;
private IUnityContainer container;
private RefreshConnectionStatus refreshConnectionStatus;
private RefreshConnectionStatusEventArgs args;
private ReplyRequestMessage replyMessageRequest;
private ReplyRequestMessageEventArgs eventsArgs;
#endregion
public P2pMessageService(IUserService UserService, IEventAggregator EventAggregator, IUnityContainer container)
{
userService = UserService;
this.container = container;
appLoginInstances = new ObservableCollection<AppLoginInstance>();
inComingMessageTypes = new ObservableCollection<MessageType>();
inComingMessages = new ObservableCollection<PDCL.ERP.DataModels.Message>();
outGoingMessages = new ObservableCollection<PDCL.ERP.DataModels.Message>();
this.args = new RefreshConnectionStatusEventArgs();
this.eventsArgs = new ReplyRequestMessageEventArgs();
this.eventAggregator = EventAggregator;
this.refreshConnectionStatus = this.eventAggregator.GetEvent<RefreshConnectionStatus>();
this.replyMessageRequest = this.eventAggregator.GetEvent<ReplyRequestMessage>();
}
#region IOnlineStatus Event Handlers
void ostat_Offline(object sender, EventArgs e)
{
}
void ostat_Online(object sender, EventArgs e)
{
try
{
m_participant.Join(userService.AppInstance);
}
catch (Exception Ex)
{
Logger.Exception(Ex, Ex.TargetSite.Name + ": " + Ex.TargetSite + ": " + Ex.Message);
}
}
#endregion
#region IServer Members
public void ConnectToMesh()
{
try
{
m_site = new InstanceContext(this);
m_binding = new NetPeerTcpBinding("P2PMessageBinding");
m_channelFactory = new DuplexChannelFactory<IServerChannel>(m_site, "P2PMessageEndPoint");
m_participant = m_channelFactory.CreateChannel();
o_statusHandler = m_participant.GetProperty<IOnlineStatus>();
o_statusHandler.Online += new EventHandler(ostat_Online);
o_statusHandler.Offline += new EventHandler(ostat_Offline);
BackgroundWorkerHelper.DoWork<object>(() =>
{
m_participant.InitializeMesh();
return new object();
}, arg =>
{
});
this.appLoginInstances.Add(this.userService.AppInstance);
}
catch (Exception Ex)
{
Logger.Exception(Ex, Ex.TargetSite.Name + ": " + Ex.TargetSite + ": " + Ex.Message);
}
}
public void Join(AppLoginInstance obj)
{
try
{
if (appLoginInstances.SingleOrDefault(a => a.InstanceId == obj.InstanceId)==null)
{
appLoginInstances.Add(obj);
this.refreshConnectionStatus.Publish(new RefreshConnectionStatusEventArgs() { Status = m_channelFactory.State });
}
m_participant.SynchronizeMemberList(userService.AppInstance);
}
catch(Exception Ex)
{
Logger.Exception(Ex,Ex.TargetSite.Name + ": " + Ex.TargetSite + ": " + Ex.Message);
}
}
public void SynchronizeMemberList(AppLoginInstance obj)
{
try
{
if (appLoginInstances.SingleOrDefault(a => a.InstanceId == obj.InstanceId) == null)
{
appLoginInstances.Add(obj);
}
}
catch (Exception Ex)
{
Logger.Exception(Ex, Ex.TargetSite.Name + ": " + Ex.TargetSite + ": " + Ex.Message);
}
}
public void BroadCastMsg(PDCL.ERP.DataModels.Message msg, List<string> securityLevels)
{
try
{
foreach (string s in securityLevels)
{
if (this.userService.IsInRole(s))
{
if (this.inComingMessages.Count == 0 && msg.CreatedByApp != this.userService.AppInstanceId)
{
this.inComingMessages.Add(msg);
}
else if (this.inComingMessages.SingleOrDefault(a => a.MessageId == msg.MessageId) == null && msg.CreatedByApp != this.userService.AppInstanceId)
{
this.inComingMessages.Add(msg);
}
}
}
}
catch (Exception Ex)
{
Logger.Exception(Ex, Ex.TargetSite.Name + ": " + Ex.TargetSite + ": " + Ex.Message);
}
}
public void BroadCastReplyMsg(PDCL.ERP.DataModels.Message msg)
{
try
{
this.replyMessageRequest.Publish(new ReplyRequestMessageEventArgs() { Message = msg });
this.inComingMessages.Remove(this.inComingMessages.SingleOrDefault(o => o.MessageId == msg.MessageId));
}
catch (Exception ex)
{
Logger.Exception(ex, ex.TargetSite.Name + ": " + ex.TargetSite + ": " + ex.Message);
}
}
public void Whisper(string Member, string MemberTo, string Message)
{
}
public void InitializeMesh()
{
}
public void Leave(AppLoginInstance obj)
{
if (this.appLoginInstances.SingleOrDefault(a => a.InstanceId == obj.InstanceId) != null)
{
this.appLoginInstances.Remove(this.appLoginInstances.Single(a => a.InstanceId == obj.InstanceId));
}
}
#endregion
|
|
|
|
|
Hi!
I have a question.
I have two ListBoxes with an Add and Remove Button. Currently I list all my options in ListBox1 using the following code:
ListBox1.DataSource = payItemClass.GetPayItems();
ListBox1.DisplayMember = "PayItem.Code";
ListBox1.ValueMember = "PayItem.Id";
How can I move the items I select in ListBox1 to ListBox2 and then save them to my sql table?
Thank you in Advance!!
Illegal Operation
|
|
|
|
|
ListBox has a property named SelectedItems. Use it to get the selected itmes in listbox1
and add them to listbox2. As for adding them to SQL either use stored procs or querys but try to
use parameters.
Something like this silly example to copy the items from one lst to another:
listBox2.BeginUpdate();
listBox2.Items.Clear();
foreach (var item in listBox1.SelectedItems)
{
listBox2.Items.Add(item);
}
listBox2.EndUpdate();
pseudo only kind of(for SQL table):
SQLConnection con = new SqlCommand(ConnStringHere);
SQLCommand cmd = new SqlCommand();
cmd.Conection = con;
cmd.CommandText = "Inserto Into TblName(ColName1, ColName2) Values(@paramName1, @paramName2)"
cmd.Parameters.AddWithValue("@paramName", paramValue);
.
.
.
Just an irritated, ranting son of ... an IT guy.
At your trolling services
modified on Wednesday, May 5, 2010 2:50 AM
|
|
|
|
|
If you have not yet solved your problem, try looking at this thread[^]. The problem sounds basically the same as yours.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
HI,
in my code, I am checking for a excel file exists or not. if it doesn't exists i am trying to creating new one along with some columns. here i am able to create the excel file but i don't know how to add columns to it. can any one please help??
below is my code block.
private void CheckExcelfile()
{
string path = @"C:\Servicedeatils.xls";
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
How to add columns to the created excel file??
}
}
}
fttyhtrhyfytrytrysetyetytesystryrty
|
|
|
|
|
This is very wrong.
You are not creating a Excel file, but a text file with the extension .xls.
To use Excel you mainly have 2 options:
1) Interrop
2) OleDB
* 3) Commercial apps that ease process of writing/reading to/from Excel.
Bingle for "Excel C#" and you'll find many resources.
Here on CP there are some nice articles on using Excel.
Just an irritated, ranting son of ... an IT guy.
At your trolling services
|
|
|
|
|
Hi,
Thanks for reply.
instead of using File.CreateText, i can use File.Create(path) also i think this will create the required file. but here i am struck with adding columns to it. how to do that?
fttyhtrhyfytrytrysetyetytesystryrty
|
|
|
|