|
I need a horizontal tree control that would look like all the trees one sees in data structures textbooks, but have all the usual functionality (check boxes, drag/drop, etc.) Does such a thing exist?
The root would be center/top. Nodes would grow down to the left or right. Leaves would all be at the bottom.
How hard would it be to convert a std tree control into a horizontal one?
|
|
|
|
|
It would be very hard - and probably incredibly stupid - to make the "standard" tree control do such a thing. First of all, the .NET tree control is actually the SysTreeView32 common control in Windows, wrapped in a class for easy use with .NET. With this in mind, you have to go very low-level to change such behavior.
Since you're changing so much, however, it'd be much easier to do this from scratch in a completely managed solution. What you're describing, however, is common in organization charts. You could try searching for an existing organization chart control in .NET, which may help in constructing a more generic tree with the behavior you want. I can't think of any off-hand, but I'm willing to bet there's a few around - perhaps even here on CodeProject.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
That's an excellent tip. Thanks!
Dave
|
|
|
|
|
I think an org chart control would do what I need. I searched on Google and CodeProject, and I only found one org chart component: http://www.anextech.com/AnexTree.htm
If anyone has other suggestions, I appreciate them. I don't mind purchasing a good control, but I would like to get source code with it. The above control doesn't include source. Otherwise, it's pretty much what I was looking for.
Thanks.
|
|
|
|
|
I have a datagrid with some columns in it. I want to format a column in it which has only intergers (length <=8) in this way: xxx-xxxxx; where x is any digit. Is it possible to use the girdcolumnstyles' format property for this? If yes, how? If no, what should i do?
|
|
|
|
|
If you used a BoundColumn with your datagrid, you could use the DataFormatString property. There are some good examples in the DataFormatString help.
|
|
|
|
|
This code works in a "console" app, but when I place it in a COM+ serviced component, I got "E_NOINTERFACE" exception when I called OleDbAdapter.Fill(..)
public void AuthenticateUser(string username, string passwd, ref int retcode)
{ //AuthenticateUser
int count = -1;
string db_username;
string db_passwd;
int db_numlogin;
string connString;
OleDbConnection connUsers;
OleDbDataAdapter daUsers;
DataSet dsUsers;
EventLog log = new EventLog("Application");
log.Source = "AccessDbMaster";
try
{ //try block
retcode = -1;
connString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Program Files\AppAlgo\ComPlusServiceDemo\datasource\users.mdb; User ID=Admin; Password=";
connUsers = new OleDbConnection(connString);
daUsers = new OleDbDataAdapter("SELECT * FROM Users WHERE username='"+ username + "' AND passwd='" + passwd + "'", connUsers);
dsUsers = new DataSet();
daUsers.Fill(dsUsers, "Users");
count = dsUsers.Tables["Users"].Rows.Count;
if(count==0) {
log.WriteEntry("AccessDbMaster authentication failed. User not found");
return;
}
foreach(DataRow user in dsUsers.Tables["Users"].Rows)
{
db_username = user["username"].ToString();
db_passwd = user["passwd"].ToString();
db_numlogin = (int) user["numlogin"];
retcode = db_numlogin; //return value
//Increment number of login:
db_numlogin++;
user["numlogin"]=db_numlogin;
}
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(daUsers);
daUsers.Update(dsUsers, "Users");
connUsers.Close();
} //try block
catch(Exception err)
{
log.WriteEntry("AccessDbMaster authentication failed. Info: " + err.Message);
retcode=-1;
}
return;
} //AuthenticateUser
Error message is not very descriptive: "No error information available: E_NOINTERFACE(0x80004002)."
I'm suspecting that it's got to do with COM+ security. I checked identity using COM+ Admin Tool. The application, and all COM+ apps in question, runs under SYSTEM account (Administrators). Impersonation level is "Impersonate" and "Packet"... Any idea? Thanks!
|
|
|
|
|
Hi, I'm writing a custom scroll bar control. My custom scroll bar control uses transparency, and has two button children that also have transparency. The background of the main window beneath my button located at (0,0) on the scroll bar and the background beneath the main scroll bar are fine. For some reason however, the background of the button at (0,30) in the scroll bar (the down button) has the main window background behind it offset by 30 pixels downward! It seems that a transparent window within a transparent window will have the shown background offset by its position within the parent transparent window.
I think I have located the source of this problem.. In the OnPaint method that is called to draw the background behind the transparent scroll bar which is behind the transparent button, somehow the e.Graphics.Transform.OffsetY is 0 when in the corresponding OnPaintBackground that was called just before it the e.Graphics.Transform.OffsetY was -30! I believe this is why my image is being offset, but I don't know why it's happening?
I know it's a complex problem, but can anyone help me? I've been working at it for about 6 hours now!
Thanks!
|
|
|
|
|
Ok, well, I've found a solution to my problem. After my hours and hours of debugging I've concluded that it's either a bug with the framework or something else beyond the scope of my code that is happening.
I have solved the problem by drawing the background of the scroll bar control manually rather than calling the default OnPaintBackground.
Here is the code that fixed it in case anyone is interested:
protected override void OnPaintBackground(PaintEventArgs e)<br />
{<br />
GraphicsContainer container = e.Graphics.BeginContainer(e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);<br />
<br />
Rectangle rectBg = e.ClipRectangle;<br />
rectBg.Offset(this.Bounds.Left, this.Bounds.Top);<br />
e.Graphics.TranslateTransform(-this.Bounds.Left, -this.Bounds.Top);<br />
InvokePaintBackground(this.Parent, new PaintEventArgs(e.Graphics, rectBg));<br />
InvokePaint(this.Parent, new PaintEventArgs(e.Graphics, rectBg));<br />
<br />
e.Graphics.EndContainer(container);<br />
}
Any improvements to this method are appreciated.
|
|
|
|
|
How can I request a web page using POST while passing some variables? Like I want to access
http://www.localhost.com/info.aspx
with POST and with variables info=0 and set=1 ?
I have tried stupid HttpWebRequest BUT it is NOT WORKING ... I posted the question few days back BUT nobody answered it... GURU PPL where ARE YOU???
me doing this..
<br />
string lcUrl = "http://localhost/test.php";<br />
HttpWebRequest loHttp = (HttpWebRequest) WebRequest.Create(lcUrl);<br />
<br />
<br />
string lcPostData = "info=" + System.Web.HttpUtility.UrlEncode("0") + "&set=" + System.Web.HttpUtility.UrlEncode("1");<br />
<br />
loHttp.Method="POST";<br />
<br />
byte [] lbPostBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(lcPostData);<br />
<br />
loHttp.ContentLength = lbPostBuffer.Length;<br />
<br />
Stream loPostData = loHttp.GetRequestStream();<br />
loPostData.Write(lbPostBuffer,0,lbPostBuffer.Length);<br />
loPostData.Flush();<br />
loPostData.Close();<br />
<br />
HttpWebResponse loWebResponse = (HttpWebResponse) loHttp.GetResponse();<br />
System.Text.Encoding enc = System.Text.Encoding.GetEncoding(1252);<br />
StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(),enc);<br />
<br />
string lcHtml = loResponseStream.ReadToEnd();<br />
Console.Write(lcHtml);<br />
loWebResponse.Close();<br />
loResponseStream.Close();<br />
---------------------
A gasp of breath,
A sudden death:
The tale begun.
A rustled page
Passes an age:
The tale is done.
|
|
|
|
|
Hmmm... Strange. This looks nothing like mine did...
Well, this worked for me:
Encoding enc = Encoding.GetEncoding("ISO-8859-1");
WebClient wc = new WebClient();
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
string request = "input_name=the_value";
byte[] requestBytes = enc.GetBytes(request);
byte[] responseArray = wc.UploadData(uriString, "POST", requestBytes);
string responseString = enc.GetString(responseArray);
Have a look at my latest article about Object Prevalence with Bamboo Prevalence.
|
|
|
|
|
ahhh... you don know what you have just done! Gave me life... YES...Thank you very much... a thousand for you; to fill your room with fregrence...
mE
---------------------
A gasp of breath,
A sudden death:
The tale begun.
A rustled page
Passes an age:
The tale is done.
|
|
|
|
|
do you know how to tell what webserver a site is running?
/\ |_ E X E GG
|
|
|
|
|
<code>public string[] twoCharArray;</code>
public buffer(string file)
{
guid.button1.Enabled=false;
FileInfo fi = new FileInfo(file);
string rs = null;
if (fi.Exists)
{
StreamReader sr = new StreamReader(file);
while ((rs = sr.ReadLine()) != null)
{
stringFromFile += rs;
}
if (stringFromFile == null)
MessageBox.Show("No text in bitfile.txt");
else
{
<code>this.twoCharArray = stringFromFile.Split();</code>
}
}
Ok, check out that code. All it does is load a .txt file and then separate it into an array. The particular file it's processing is composed as follows...
81 09 0f f0 04 1a 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0 09 0f f0 0f
f0 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0 09 0f
f0 0f f0 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0
09 0f f0 0f f0 0f f0 0f f0 09 0f f0 0f f0 0f f0 0f f0 ff 00 ff and so on...
So, it takes all of that and saves it into the string "stringFromFile ". Then after it's all saved into the string it goes to...
this.twoCharArray = stringFromFile.Split();
Where it is spit up by at every space, so we get an array that "would look like this..."
"twoCharArray"
0| 81
1| 09
2| 0f
3| f0
4| 04
5| 1a
...
Now, here's what I need....
I need to add two things (00, ff ) before every cell in the array. SO... the "twoCharArray ", "will look like" this now... observe the pattern.
"twoCharArray"
00| 00
01| ff
02| 81
03| 00
04| ff
05| 09
06| 00
07| ff
08| 0f
09| 00
10| ff
11| f0
12| 00
13| ff
14| 04
15| 00
16| ff
17| 1a
...
...
I would believe this is quite simple, but yet again I cannot figure out how to do it...
Would someone please assist me with this roadblock?
/\ |_ E X E GG
|
|
|
|
|
Try:
private string[] Splitsville(string file, params string[] fill)
{
string finalFill = (" " + string.Join(" ", fill) + " ").Replace(" ", " ");
string[] twoCharArray = null;
string stringFromFile = null;
FileInfo fi = new FileInfo(file);
string rs = null;
if (fi.Exists)
{
StreamReader sr = new StreamReader(file);
while ((rs = sr.ReadLine()) != null)
{
stringFromFile += " " + rs + " ";
}
if (stringFromFile == null)
{
MessageBox.Show("No text in bitfile.txt");
}
else
{
string workarea = stringFromFile.TrimEnd(' ');
while (workarea.IndexOf(" ") != -1)
{
workarea = workarea.Replace(" ", " ");
}
workarea = workarea.Replace(" ", finalFill).TrimStart(' ');
twoCharArray = workarea.Split(' ');
}
}
return twoCharArray;
}
The call for your particular case is Splitsville(file, "00", "FF")
|
|
|
|
|
small prob...
I called the method like this...
split sp=new split("C:\\asdf.txt", "00", "FF");
THen the program gets stuck in a neverending loop right here...
while (workarea.IndexOf(" ") != -1)
{
workarea = workarea.Replace(" ", " ");
}
I'm I calling it wrong or somehting... what's up?
/\ |_ E X E GG
|
|
|
|
|
Actually, let me rephrase the question...
How can I make this code add a "00" then an "FF" to the array before each string?
public buffer(string file, int delay)
{
FileInfo fi = new FileInfo(file);
string rs = null;
if (fi.Exists)
{
StreamReader sr = new StreamReader(file);
while ((rs = sr.ReadLine()) != null)
{
stringFromFile += rs;
}
if (stringFromFile == null)
MessageBox.Show("No text in bitfile.txt");
else
{
this.twoCharArray = stringFromFile.Split();
}
}
else
{
MessageBox.Show("Cannot find bitfile.txt.");
}
Does this make better sense???
/\ |_ E X E GG
|
|
|
|
|
If you mean for each ReadLine the answer is easy:
stringFromFile += rs;
becomes
stringFromFile += " 00 FF " + rs;
otherwise what do you mean by "string"?
|
|
|
|
|
If I replace the code with your's it only adds 00 FF to the beginning of the array...
I need it before each string.
And by sting I mean each "cell" in the string array twoByteArray .
with you code it's like this...
00 FF 1a 12 21 1f etc....
do you think you can make it everyother one like this...
00 FF 1a 00 FF 12 00 FF 21 00 FF 1f .....
/\ |_ E X E GG
|
|
|
|
|
Did you try the Splitsville function in my first response?
It accepts the file name, and a list of values to insert before each value in the file, which is what you area trying to do.
|
|
|
|
|
I havn't forgot about yours yet... give me a few to figure it out. thanks for your effort.
/\ |_ E X E GG
|
|
|
|
|
Hello,
sorry if this is a newbie question but here goes anyway.
I want to write a simple windows application, that opens an external program (.exe) after clicking on a Button.
Can you post the code?
How can I find these infos in the MSDN documentation?
Thank you
|
|
|
|
|
using System;
<code>using System.Diagnostics;</code>
namespace ConsoleApplication6
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
<code>Process.Start("iexplore.exe");</code>
Console.WriteLine("Internet Explorer should have started...");
}
}
}
The things in "code " are what you should take note of, in order to answer your question.
/\ |_ E X E GG
|
|
|
|
|
To the original poster, don't forget the value of the documentation - it's where the people that answer your questions learn things. Read the documentation about the System.Diagnostics.Process class and see what else you can do, like provide command line arguments, redirect stdout, stderr, and stdin, and pass shell command verbs for non-executable files (like opening HTML documents with the user's default browser without knowing what their default browser is).
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
thank you very much for the code.
I think the MSDN help is great to learn how to use classes/components, but it doesn't explains which class has to be used for a certain purpose.
where can I find a handbook that can guide me on finding help on the msdn documentation?
I'm looking for help on finding help: weird,isn't it?
|
|
|
|