|
PropertyDescriptor has a protected constructor that you should override that takes and initializes the PropertyDescriptor from a MemberDescriptor , which you can get with TypeDescriptor.GetProperties(this, true) . In your override for IsReadOnly , you can use metadata to determine if the user can set them or not. I do this very thing in our application based on dynamic properties pulled form a database. As I mentioned before, it you utility role-based security, this gets very easy. That attribute I mentioned before would have the groups (or roles) that can set the property. Your IsReadOnly override gets the list, calls IPrincipal.IsInRole and if it returns true for any of those roles, you return false . If not, return true (read-only).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I am almost there....just can't get the last pieces defined.
My CustomTypeDescriptor.GetProperties calls
TypeDescriptor.GetProperties(this,attributes,true);
I then create a new PropertyTypeCollection and make each PropertyDescriptor my custom PropertyDescriptor. I pass the PropertyDescriptor as the MemberDescriptor object.
protected PropertyDescriptorCollection GetFilteredReadonlyProperties(Attribute[] attributes)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(this, attributes, true);
PropertyDescriptorCollection newProperties = new PropertyDescriptorCollection(new PropertyDescriptor[0]);
foreach (PropertyDescriptor property in properties)
{
DynamicPropertyDescriptor newProp = new DynamicPropertyDescriptor(property);
newProperties.Add(newProp);
}
return newProperties;
}
I cannot figure out what I code, though within these abstract methods:
PropertyDescriptor.PropertyType()
PropertyDescirptor.GetValue()
PropertyDescriptor.SetValue()
PropertyDescriptor.ComponentType()
Since these are abstract....I cannot do a base.method().
_____________________________________________
Of all the senses I could possibly lose, It is most often the one called 'common' that gets lost.
|
|
|
|
|
PropertyType returns the Type of the property. Just return obj.GetType() . ComponentType returns the Type of the component that the property belongs to. GetValue and SetValue set the property for the object to which the property belongs. You can use reflection to achieve this.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I finally got it WORKING!!! Thank you Heath.
While the help files provided no help looking up PropertyDescriptor, I found more help looking up the PropertyDescriptor.{method name} where they had some more useful info under the Note to Inheritor: sections. That combined with Reflection finished it off.
I think in my freetime ( ????) I will put together a sample application and publish it as a visual aid for those developers who are like me and need more visual assistance!
_____________________________________________
Of all the senses I could possibly lose, It is most often the one called 'common' that gets lost.
|
|
|
|
|
When I tell people to look in the documentation for some class, I do mean everything about that class. Remember, it's Research and development. The latter without the former is what separates the developers from the code-monkeys.
I'm glad you have it working. The important thing is to understand what a MemberDescriptor does so you can utilize it to its full potential. For instance, I have a derivation that uses rows from a couple tables in a database for a completely object-oriented and extensible way of managing preferences. Those properties work great with a PropertyGrid but also have a parent collection that can get and set different property containers using a singleton pattern. All this is done with classes and interfaces in the System.ComponentModel namespace. It's a very cool namespace to fully understand when dealing with component development because there are so many things supported by designers that ship with the .NET Framework and with common IDEs like VS.NET and SharpDevelop.
Just thought I'd mention this more as an exmaple of what else you can do with PropertyDescriptor s and related classes.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
can you tell me how to pass a integer command line parameter in C# I am struggling with this
Please let me know at the earliest
Praveen
|
|
|
|
|
Only strings can be passed, hence an string[] array being passed to your entry point method (typically Main ) or Environment.GetCommadLineArgs() returning a string[] . Therefore, you should be looking for a way to convert the string. There are many ways to do this, such as Int32.Parse and Convert.ToInt32(String) .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
how can i execute a file
e.g. if i have a file c:\text.exe or d:\test.htm
So if i have a textbox and the user enter the filelocation enter a filename.
if it is an application, i want execute that application, if it is a document, i want execute the defeault program for reading that file
in VB6 there was an execute API, i thougt Shellexecute
But how can i do this in c#
|
|
|
|
|
Check for Process.Start() and ProcessStartInfo classin MSDN.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
Thanks
But if the filetype is not registered an error occur.
Can i view the 'Open With...' dialog
|
|
|
|
|
Use ProcessStartInfo and set UseShellExecute and ErrorDialog both to true :
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = myTextBox.Text;
info.UseShellExecute = true;
info.ErrorDialog = true;
Process.Start(info); Be sure to read the class documentation for additional members to see what other features exist.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
One way to do this is to use System.Diagnostics.Process...
using System.Diagnostics;
.
.
.
//
// opens an instance of notepad with the file c:\mytest.xsd
//
private void OpenTheFileInNotepad(string fileName)
{
Process.Start("notepad.exe",fileName);
}
see MSDN at:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDiagnosticsProcessClassTopic.asp
|
|
|
|
|
I have used String array and integer for one console application.
But size of the executable is 16kb. can u help me in this view.
|
|
|
|
|
Can you explain more the relation of size of executable file with the use of String Array and integer in your applicattion?
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
I am using a string array which is having 13 constants and i am comparing with other 13 constants.
When i built that executable file its size is 16kb but i feel 16kb is very costly.
Please explain me
Regards,
|
|
|
|
|
GetOn&GetGoing wrote:
When i built that executable file its size is 16kb but i feel 16kb is very costly.
Is it? Then perhaps you should consider using something other than the .NET Framework. I have done some experiments and the smallest application I could build was 16kb.
Also consider that when your application is running it will be loading .NET Framework DLLs. The 16kb size of this executable is a drop in the ocean compared with the size of the Framework.
--Colin Mackay--
EuroCPian Spring 2004 Get Together[^]
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
|
|
|
|
|
Yah, they are really small in size. The only time I got smaller than this, somtimes in VC6 which I used some win32 applicationns with some specific compile attribute which lead to very small size like 3 to 5 Kb.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
Look at the compiler options. csc -o+ -debug- -filealign:512
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
just wondering what methods do i need to override to be able to change bankground color of the status bar? set for exemple a gradient fill backgroung like with iexplorer/explorer.
so far i got just been able to have the devider but no bg
private void statusbarDrawItem(object sender, System.Windows.Forms.StatusBarDrawItemEventArgs sbdevent) {<br />
StatusBarPanel ssb = sbdevent.Panel;<br />
Rectangle rect = sbdevent.Bounds;<br />
<br />
sbdevent.Graphics.DrawLine(new Pen(Color.White), rect.Right-1,rect.Top,rect.Right-1,rect.Bottom-2);<br />
sbdevent.Graphics.DrawLine(SystemPens.ControlDark, rect.Right-2,rect.Top,rect.Right-2,rect.Bottom-2);}
|
|
|
|
|
You want to use Graphics.FillRectangle with a LinearGradientBrush :
private void statusBarDrawItem(object sender,
StatusBarDrawItemEventArgs e)
{
LinearGradientBrush gradient = new LinearGradientBrush(
e.Bounds, Color.Blue, e.BackColor, LinearGradientMode.Horizontal);
e.Graphics.FillRectangle(gradient, e.Bounds);
}
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I want to ask that how can i read, edit and write a xsl file. what classes i have to use. please guide me a little
Thanx in advance
Regards
minamkhan
Inam
|
|
|
|
|
You can read and write XML files (of which an XSLT is another XML grammar) using XmlTextReader and XmlTextWriter , but I doubt this is what you're looking for.
If you're looking for graphical XML editors, you need to search CodeProject and the rest of the web. There's plenty of articles, how-tos, and even sample source and libraries out there. You just have to find them.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Sir i try to explain the problem with a little example. I have a xml file an a xsl file, Now i have three fields in xml file let's say Name, Age, Address. Now i displays these fields to user as labels in windows Form. Now when user right click on any label i will display option to him e.g Font, Color different dialog etc. Now when user picks up the color i have to write that color against that field in xsl. will it be possible with XmlTextReader and XmlTextWriter
Thanx in advance
Regards
minamkhan
Inam
|
|
|
|
|
You mean XML, not XSL. XSL is a transform you apply to an XML file that contains data, unless you mean you need to change that transform in order to add a color attributes of sorts; otherwise, forget XSL for the moment.
You'd be better off using an XmlDocument so that you can easily traverse the DOM. See the documentation for the XmlDocument in the .NET Framework SDK for more information. If you keep track of which label belongs to which element or attributes (there are no fields in XML), you can use XPath to select node (via SelectNodes or SelectSingleNode for example) and then append an attributes. You really need to read the documentation for these classes, though, as well as some of the XML topics in the .NET Framework SDK, which you can view from http://msdn.microsoft.com/netframework[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Actually i want to change the transform and that is possible only with xsl. I think as u said that xslt is another grammer of xml. My problem will be solved by XmlTextReader and XmlTextWriter. Whats ur opinion
Regards
minamkhan
Inam
|
|
|
|