|
i am using a treelistview (found here at codeproject) that is populated with potentially hundreds of items (test cases). on start my app will fill the tree with all the test cases and i give the option to reset the tree to inital state, which essentially just reloads again all the test cases to initial state. the problem is when these test cases are all loaded into the tree and all the initial subitems are reset, it's so slow you can watch the tree fill from the top to the bottom with a lot of flickering at the same time. my question is do i need to do double buffering? i don't know how hard double buffering is, but i thought maybe it would be easier just to disable painting while the tree is being filled and have it repaint everything when it's all done. that way i may be able to avoid all the panting and flickering while the tree is loading. it's ok for the user to have to wait a sec for the tree to load, so as long as they don't have to actually watch it load and all the flickering. is there a way to do this?
thanks!
|
|
|
|
|
In the normal TreeView class, you'd just call it's .BeginUpdate() and .EndUpdate() methods around the code where your clearing the date from the TreeView. I have no idea if the TreeListView your using exposes such methods. Double-buffering will NOT help your situation, simply because the TreeListView is redrawing itself after it removes/adds a node from/to the Tree.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Inside a tabpage I have a treeview docked to the left hand side from which the users drags treenodes onto a panel on the right. If the tree view is showing the vertical scrollbar then when dragging over the scrollbar slowly the drag and drap is being automatically cancelled
why ?
All help gratefully accepted
Thanks in advance
alan
|
|
|
|
|
hi, i need to save my GDI+ drawing and print them. for my save function i tried this but it saves as blank:
<br />
bt = new Bitmap (800,600);<br />
myGraphics = Graphics.FromImage(bt);<br />
<br />
private void saveImages()<br />
{<br />
SaveFileDialog saveFileDialog1 = new SaveFileDialog();<br />
saveFileDialog1.Title ="Save File";<br />
saveFileDialog1.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp";<br />
if(bt != null)<br />
{<br />
if ((saveFileDialog1.ShowDialog() == DialogResult.OK))<br />
{<br />
string strFileName = saveFileDialog1.FileName;<br />
bt.Save(strFileName ,ImageFormat.Bmp);<br />
}<br />
}<br />
}
why is this so. and hw do i go about doing the print function?
Chris
|
|
|
|
|
Why would you expect there to be anything in your bitmap? You aren't drawing anything. If you think you are, then be sure to post all relevent code.
To print images, you use the System.Drawing.Printing namespace members, like PrintDocument . This will give you a Graphics object that you can use to draw your image (like Graphics.DrawImage ) to the print device.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
sorry.. here are my codes.
<br />
public class Graph : System.Windows.Forms.Form <br />
{<br />
public Bitmap bt;<br />
public Graphics myGraphics; <br />
<br />
public Graph()<br />
{<br />
bt = new Bitmap (800,600); <br />
myGraphics = Graphics.FromImage(bt);<br />
}<br />
<br />
protected override void OnPaint(PaintEventArgs e)<br />
{ <br />
base.OnPaint(e);<br />
DrawImage(e.Graphics);<br />
}<br />
private void DrawImage(Graphics myGraphics)<br />
{<br />
Pen myPen1 = new Pen (color.Blue,1);<br />
<br />
Point pt20 = new Point (20,30);<br />
Point pt21 = new Point (250,30); <br />
<br />
myGraphics.DrawLine (myPen1,pt20,pt21); <br />
}<br />
<br />
public Bitmap ReturnImage()
{<br />
DrawImage(myGraphics);<br />
return bt;<br />
}<br />
<br />
private void saveDrawing()<br />
{<br />
SaveFileDialog saveFileDialog1 = new SaveFileDialog();<br />
saveFileDialog1.Title ="Save File";<br />
saveFileDialog1.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp";<br />
<br />
if(bt != null)<br />
{<br />
if ((saveFileDialog1.ShowDialog() == DialogResult.OK))<br />
{<br />
string strFileName = saveFileDialog1.FileName;<br />
bt.Save(strFileName ,ImageFormat.Bmp);<br />
}<br />
}<br />
else<br />
{<br />
MessageBox.Show("Blank bitmap");<br />
}<br />
<br />
}<br />
<br />
private void btnSave_Click(object sender, System.EventArgs e)<br />
{<br />
saveDrawing();<br />
}<br />
}<br />
}
thanks.
Chris
|
|
|
|
|
The first error that I noticed right away: never store your Graphics object. You either use the one passed to you in the PaintEventArgs from your OnPaint override, or create one for your control using Control.CreateGraphics (if you want a compatible bitmap on which to draw; having a compatible bitmap means the measurement units are the same, the scaling factors, etc., as the control itself). If you create a Graphics object for a Bitmap , at least use a bitmap that is the same size as the control.
In addition to not storing the Graphics , you shouldn't even store the Bitmap (factors can change; if the user changes the screen resolution or DPI settings, for example, your bitmap may not look right because GDI+ will now draw differently), and always dispose of objects like Graphics and Bitmap to make sure their native, unmanaged resources are freed immediately (they're unmanaged because the GC doesn't know about them and won't free them automatically like it does for managed objects). If not, that memory may remain allocated for some time until the GC gets around to finalizing (destroying) the object; and the only reason the native resources are freed is because the classes follow the disposable pattern (the finalizer disposes only unmanaged objects, while the IDisposable implementation disposes both unmanaged and managed objects immediately).
The code you should be using would be similar to the following:
class Graph : Form
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
DrawImage(e.Graphics);
}
private void DrawImage(Graphics g)
{
}
public Bitmap ReturnImage()
{
Bitmap bmp = new Bitmap(Width, Height);
using (Graphics g = Graphics.FromImage(bmp))
DrawImage(g);
return bmp;
}
void SaveDrawing()
{
using (SaveFileDialog dialog = new SaveFileDialog())
{
if (dialog.ShowDialog() == DialogResult.OK)
using (Bitmap bmp = ReturnImage())
bmp.Save(dialog.FileName, ImageFormat.Bmp);
}
}
}
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
hi, i've got this graph drawn using GDI+. now i need to draw a vertical line across this graph. when i click a button, it moves this vertical line horitontally from left to right of the graph. when this happens, the line wiil read each points of the line graph drawn. any idea anyone??
Chris
|
|
|
|
|
Are you trying to create a piece of code for drawing a math function?? The moving line is supposed to tell the user the location of the intersects??
If so the best approach is to calculate the point using the function to make sure its accurate.
This posting is provided "AS IS" with no warranties, and confers no rights.
Alex Korchemniy
|
|
|
|
|
hi, i've drew this small rectangle using GDI+. i've got button1 and button2. both this button will display the same rectangle when clicked. When i click button1, it displays my rectangle without a problem. however, when i clicked button2, it displays my rectangle but at a differenct position. i set its myGraphics.TranslateTransform(0,0) but it's not working. why is this so?
Chris
|
|
|
|
|
nuttynibbles1984 wrote:
both this button will display the same rectangle ...
when i clicked button2, it displays my rectangle but at a differenct position.
Since a rectangle is basically a Point and a Size , the fact that it's drawn in a different location means it's not the same rectangle. The answer is in your code, but since you didn't post any it's pretty much impossible to say where it is going wrong.
Charlie
if(!curlies){ return; }
|
|
|
|
|
here are the codes..
<br />
private void DrawSmallRect(Graphics myGraphics)<br />
{<br />
Rectangle myRect1 = new Rectangle (140,200,350,250)<br />
LinearGradientBrush lBrush1 = new LinearGradientBrush( myRect1,<br />
Color.LightGray,<br />
Color.White,<br />
LinearGradientMode.Vertical );<br />
<br />
myGraphics.FillRectangle (lBrush1,myRect1);<br />
}<br />
private void button1_Click(object sender, System.EventArgs e)<br />
{<br />
temp1 = 1;<br />
}<br />
private void button2_Click(object sender, System.EventArgs e)<br />
{<br />
temp2 = 1;<br />
}<br />
<br />
protected override void OnPaint(PaintEventArgs e)<br />
{ <br />
if(temp1 == 1)<br />
{<br />
DrawSmallRect(e.Graphics);<br />
}<br />
if(temp2 == 1)<br />
{<br />
DrawSmallRect(e.Graphics);<br />
}<br />
}<br />
i'm trying to draw the same rectangle. i wanna see if it draws onto the same position. Thanks<br />
Chris
|
|
|
|
|
I don't really get what you're after here. It appears you are setting some sort of flag by setting temp1 and temp2 to 1, but you then proceed to do the exact same thing for each value.
Charlie
if(!curlies){ return; }
|
|
|
|
|
ya this is a test out. i want to test out whether if i draw the same image twice or more, will it be draw at the same position??the things is when i call button1, it displays the rectangle. since it is the same rectangle, even if i click button2 to display the rectangle twice, it will draw over the previous drawing rite? And at the same position because of the same rectangle? but wen i click button2, the rectangle will be drawn bottom of the first rectangle... why>??
Chris
|
|
|
|
|
I have created a COM+ component using C# (System.EnterpriseServices.ServicedComponent). I will register the component with Component Services, however, the component uses other .NET assemblies. What is the best way to access thos assemblies from my serviced component? I don't want to register them in the GAC since they are not shared assemblies. Any suggestions?
Thanks.
-Matt
------------------------------------------
The 3 great virtues of a programmer:
Laziness, Impatience, and Hubris.
--Larry Wall
|
|
|
|
|
Is your component going to be deployed as a library application or a server application? If its going to be deployed as a library app then you can just dump the appropriate files into the client applications along with the serviced component assembly.
If you are deploying your component as a server applicaiton you should put it in the GAC. This is done to allow the COM+ to load the assembly independent of the directory in which the actual client is running, and also to allow more than one client to use the same assembly.
This posting is provided "AS IS" with no warranties, and confers no rights.
Alex Korchemniy
|
|
|
|
|
Thanks for your help. I really appreciate it.
Will my COM+ component look for the DLLs in the system path? Or is the GAC the only solution if I'm deploying it as a server app? I've just had problems before when I've put component in the GAC and I'm trying to avoid that.
Thanks.
-Matt
------------------------------------------
The 3 great virtues of a programmer:
Laziness, Impatience, and Hubris.
--Larry Wall
|
|
|
|
|
|
I've got this code and I am trying to understand on why I got the input string to be blank at the 3rd readline(). There is about 550 characters on a line with total of 25 lines in a hex file.
sample code below...
public int ReadFileControl()
{
string FN;
string inputString;
StreamReader input;
StreamWriter output;
StreamReader OutputHeaderTest;
int rowCount = 0;
bool header;
string FileName;
// create data source.... (for DataGrid in GUI - named "fdt")
DataTable fdt = new DataTable();
DataRow dr;
fdt.Columns.Add(new DataColumn("File Name", typeof(string)));
fdt.Columns.Add(new DataColumn("# data interpreted", typeof(int)));
InterpResultTable.DataSource = fdt;
OpenFileDialog ofp = new OpenFileDialog();
ofp.CheckPathExists = true;
ofp.CheckFileExists = true;
ofp.Multiselect = true;
ofp.Filter = "Hex files (*.hex)|*.hex|Txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
ofp.FilterIndex = 0;
ofp.DefaultExt = "hex";
DialogResult result = ofp.ShowDialog();
if (result == DialogResult.Cancel)
return 0;
for(int n = 0; n < ofp.FileNames.Length; n++)
{
header = true;
rowCount = 0;
FN = ofp.FileNames[n].Replace("hex", "txt");
FileName = FN.Substring(FN.LastIndexOf("\\")+1);
//input = new FileStream(ofp.FileNames[n], FileMode.Open, FileAccess.Read);
input = File.OpenText(ofp.FileNames[n]);
try
{
OutputHeaderTest = File.OpenText(FN);
if (OutputHeaderTest.ReadLine() != "")
header = false;
//if (OutputHeaderTest.Peek != "")
// header = false;
OutputHeaderTest.Close();
}
catch
{
}
output = File.AppendText(FN);
// Continue reading while there are still lines to be read
inputString = input.ReadLine();
while (inputString != null)
{
if (header)
{
output.WriteLine(InterpretMe(inputString, header, FileName.Substring(0, 3)));
header = false;
}
output.WriteLine(InterpretMe(inputString, header, FileName.Substring(0, 3)));
//output.Flush();
inputString = input.ReadLine();
rowCount++;
}
output.Close();
input.Close();
dr = fdt.NewRow();
dr[0] = FileName;
dr[1] = rowCount;
fdt.Rows.Add(dr);
}
return 1;
}
public string InterpretMe(string hexdata, bool header, string prefix)
{
// below is to load the dll file according to the hex filename,
// pass the string there, run the interpretation,
// then return the interpreted string.
try
{
String path = Application.StartupPath + "\\" + prefix + ".dll";
Assembly a = Assembly.LoadFrom(path);
Type mm = a.GetType(prefix);
object o = Activator.CreateInstance(mm);
object [] par = new object[] {hexdata, header};
return (mm.InvokeMember("InterpretCrumData", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, par).ToString());
}
catch
{
MessageBox.Show("DLL failed");
}
return "unknown";
}
// end sample code
If there's any more question on this and I can explain more in details. Can anyone notice what my code has went wrong?
|
|
|
|
|
The Date in my sql server storedin US format, that is MM/DD/YYYY. I need to display the date in Asia format, or British format, that is DD/MM/YYYY.
DateTimeFormatInfo Asian_DateTimeFormat = new CultureInfo("en-GB", false).DateTimeFormat;<br />
Console.WriteLine ("1. DateTime: 10/15/2004: " + System.DateTime.Parse ("10/15/2004", Asian_DateTimeFormat).ToShortDateString());
Above code give me an error.
DateTimeFormatInfo Asian_DateTimeFormat = new CultureInfo("en-GB", false).DateTimeFormat;<br />
Console.WriteLine ("2. DateTime: 10/2/2004: " + System.DateTime.Parse ("10/2/2004", Asian_DateTimeFormat).ToShortDateString());
This code however successfully executed, and return me 2/10/2004.
Wht can't the first code did the same?
Any idea? Thanks!
regards,
vic
|
|
|
|
|
Two reasons:
1) There are only 12 months in a year.
2) The second parameter in the Parse method is the format provider to use when parsing the date.
By including the Asian culture in the Parse method, you told it that the date was in the form of DD/MM/YYYY, not MM/DD/YYYY. Since your parsing a US/English format date, you have to supply the Parse method the US/English culture.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thanks Dave.
I am now cracking my head to solve the problem. My server default date is US format, and the sql server as well. However, when users enter data through the web, they will enter 18/11/2004 (dd/mm/yyyy), I am trying to convert it and store in sql server using 11/18/2004 (mm/dd/yyyy). I wanted to do in dynamic way, hence I think globalization method in .Net is the solution.
I try to parse by US format at first, then UK format... however end up still having error. How shall I deal with this?
Thanks!
regards,
vic
|
|
|
|
|
How to convert a unic string to a asni string?
Thanks!
|
|
|
|
|
Momer, please describe the problem or topic, not "How to do this?" or "How to do this in C#?"...
You could say for this topic (Subject: "UNIC TO ANSI CONVERSION help needed")
Thanks in advance.
|
|
|
|
|
|