<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-1850047779793623762</atom:id><lastBuildDate>Thu, 28 Jul 2011 21:00:22 +0000</lastBuildDate><title>DotNetIdeas</title><description>.NET Framework/Compact Framework and SharePoint Programming Tips and Tricks</description><link>http://dotnetideasblog.blogspot.com/search/label/.NET%20General</link><managingEditor>noreply@blogger.com (DotNetIdeas)</managingEditor><generator>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-2126160155847211939</guid><pubDate>Thu, 06 Aug 2009 02:15:00 +0000</pubDate><atom:updated>2009-08-19T19:15:45.230-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>Get LINQ to SQL Connection String from config file</title><description>&lt;p&gt;When using Visual Studio 2008 to create LINQ to SQL DBML file, it automatically generates database connection information for us. However most of the time, we want to get the connection string from a config file. Here is how to do that:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Add ConnectionString to config file&lt;/li&gt; &lt;/ul&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;DotNetIdeasConnectionString&amp;quot;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #ff0000"&gt;connectionString&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Data Source=MyServer;Initial Catalog=DotNetIdeas;Integrated Security=True&amp;quot;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #ff0000"&gt;providerName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Open the DBML file in designer mode. Clear the “Connection String” in properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/Soyxzgh8J0I/AAAAAAAAAYw/5f_ht-9gsuY/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_ElXg_EOWn5c/Soyxz6AFzVI/AAAAAAAAAY0/oZRgpOUlEak/image_thumb.png?imgmax=800" width="244" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add partial class, for example:&lt;/li&gt;
&lt;/ul&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Configuration;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; DotNetIdeasData&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; DotNetIdeasDataContext&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; DotNetIdeasDataContext()&lt;br /&gt;            : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(ConfigurationManager.ConnectionStrings[&lt;span style="color: #006080"&gt;&amp;quot;DotNetIdeasConnectionString&amp;quot;&lt;/span&gt;].ToString(), mappingSource)&lt;br /&gt;        {&lt;br /&gt;            OnCreated();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;One thing need to be pointed out here is that every time you modify the DBML file, you have to clear that “Connection String” in properties again. Because when you drag/drop tables to the designer, it re-generate everything!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-2126160155847211939?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2009/08/get-linq-to-sql-connection-string-from.html</link><author>noreply@blogger.com (DotNetIdeas)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_ElXg_EOWn5c/Soyxz6AFzVI/AAAAAAAAAY0/oZRgpOUlEak/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-5177224916784242636</guid><pubDate>Wed, 18 Mar 2009 14:14:00 +0000</pubDate><atom:updated>2009-03-18T08:22:41.515-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>Updating User Interface during long running process in .NET</title><description>When an application has long running process, you may need to notify the user interface by updating a text box or a progress bar, etc. I created the following application to demonstrate. This is a simple demo. When you click on &amp;quot;Test&amp;quot; button. The text box will be updated with progress information.   &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/ScEBqtCnKiI/AAAAAAAAATQ/hCA-S-xo5no/image%5B6%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="190" alt="image" src="http://lh6.ggpht.com/_ElXg_EOWn5c/ScEBq2DlRtI/AAAAAAAAATU/rBCfHQb6SMI/image_thumb%5B2%5D.png" width="206" border="0" /&gt;&lt;/a&gt;   &lt;br /&gt;  &lt;div&gt;   &lt;div&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)
    {
        Thread.Sleep(1000); &lt;span style="color: #008000"&gt;// do something&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.textBox1.Text += &lt;span style="color: #006080"&gt;@&amp;quot;
line &amp;quot;&lt;/span&gt; + Convert.ToString(i);
    }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
The code above will update the text box, but only after the whole loop, i.e 5 seconds. That was because this is a single thread application. The update to the text box will be executed after the click event. 

&lt;br /&gt;

&lt;br /&gt;If you want real time update, you will need to create a thread.

&lt;br /&gt;

&lt;br /&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
{
    Thread thread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Thread(DoSomeWork);
    thread.Start();
}

&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomeWork()
{
    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)
    {
        Thread.Sleep(1000); &lt;span style="color: #008000"&gt;// do something&lt;/span&gt;
        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.textBox1.Text += &lt;span style="color: #006080"&gt;@&amp;quot;
line &amp;quot;&lt;/span&gt; + Convert.ToString(i);
    }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
But when you run the code above, you will get &amp;quot;Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.&amp;quot; exception

&lt;br /&gt;

&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/ScEBrRETVjI/AAAAAAAAATY/7K_IM2N6V-A/image2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="image" src="http://lh5.ggpht.com/_ElXg_EOWn5c/ScEBrtBV39I/AAAAAAAAATc/nQawwGlZlbw/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; 

&lt;br /&gt;

&lt;br /&gt;That was because the text box was created by the main thread. You can not access it directly from a new thread. There are a lot of articles talking about this issue. You may check &lt;a href="http://www.infosysblogs.com/microsoft/2006/10/cross_thread_ui_control_access.html"&gt;this one&lt;/a&gt;. Basically what they are saying is you need a way to call back from the new thread. Here is quote talking about the Control.InvokeRequired property from MSDN:

&lt;br /&gt;

&lt;br /&gt;

&lt;blockquote&gt;&lt;em&gt;Controls in Windows Forms are bound to a specific thread and are not thread safe. Therefore, if you are calling a control's method from a different thread, you must use one of the control's invoke methods to marshal the call to the proper thread. This property can be used to determine if you must call an invoke method, which can be useful if you do not know what thread owns a control. &lt;/em&gt;

  &lt;br /&gt;&lt;/blockquote&gt;
Below is the sample code. When you run it, you will see that the text box will be updated every second.

&lt;br /&gt;

&lt;br /&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Form1 : Form
{
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UICallerDelegate(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i);

    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Form1()
    {
        InitializeComponent();
    }

    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        Thread thread = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Thread(DoSomeWork);
        thread.Start();
    }

    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomeWork()
    {
        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)
        {
            Thread.Sleep(1000); &lt;span style="color: #008000"&gt;// do something&lt;/span&gt;
            UpdateTextbox(i);
        }
    }

    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UpdateTextbox(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i)
    {
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.InvokeRequired)
        {
            UICallerDelegate dlg = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; UICallerDelegate(UpdateTextbox);
            BeginInvoke(dlg, i);
        }
        &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
        {
            &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.textBox1.Text += &lt;span style="color: #006080"&gt;@&amp;quot;
 &amp;quot;&lt;/span&gt; + Convert.ToString(i);
        }
    }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-5177224916784242636?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2009/03/updating-user-interface-during-long.html</link><author>noreply@blogger.com (DotNetIdeas)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_ElXg_EOWn5c/ScEBq2DlRtI/AAAAAAAAATU/rBCfHQb6SMI/s72-c/image_thumb%5B2%5D.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-3422632941247116179</guid><pubDate>Tue, 27 Jan 2009 19:52:00 +0000</pubDate><atom:updated>2009-01-27T11:52:58.976-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to work around the issue with “No Printers are installed” exception when using ComponentOne C1PrintDocument?</title><description>&lt;p&gt;When using the ComponentOne C1.C1PrintDocument.C1PrintDocument to generate and print PDF file, if you received &amp;#8220;No printers are installed&amp;#8221; exception. It has something to do with the way you set the PrinterSettings. You would think the following codes are the same. But the first one would throw &amp;quot;No printers are installed&amp;quot; exception. &lt;/p&gt;  &lt;div&gt;   &lt;div&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;System.Drawing.Printing.PrinterSettings settings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; System.Drawing.Printing.PrinterSettings();
settings.PrinterName = printerIdentifier;
settings.Copies = numberOfCopies;
c1PrintDocument1.Print(settings, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt;
So use the following instead.&lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;c1PrintDocument1.PageSettings.PrinterSettings.PrinterName = printerIdentifier;
c1PrintDocument1.PageSettings.PrinterSettings.Copies = numberOfCopies;
c1PrintDocument1.Print(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;/pre&gt;
It also happens when trying to set the margins. &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-3422632941247116179?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2009/01/how-to-work-around-issue-with-no.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-1368954512385380102</guid><pubDate>Mon, 24 Nov 2008 16:52:00 +0000</pubDate><atom:updated>2009-08-14T20:07:52.689-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>Use reflection to load an assembly in GAC</title><description>&lt;p&gt;Last week, when trying to convert an application from .NET 1.1 to .NET 2.0, I ran into an issue with loading an assembly in GAC using reflection. We used to be able to call Assembly.Load(“assemblyName”) to load it. Now we received an exception saying &amp;quot;File or assembly name ... or one of its dependencies, was not found&amp;quot;. It turned out that in .NET 2.0, if the assembly is in GAC, you have to specify the full name of the assembly in above method. That includes version number, public key and culture. You may use LoadWithPartialName() method. But it is obsolete in 2.0 and later.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-1368954512385380102?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2008/11/use-reflection-to-load-assembly-in-gac.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-1769624478058994313</guid><pubDate>Mon, 24 Nov 2008 16:43:00 +0000</pubDate><atom:updated>2009-08-14T20:10:03.324-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>Fail to add an assembly to GAC on Vista machine</title><description>&lt;p&gt;Got the following error when trying to add assembly using a batch file the other day: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Failure adding assembly to the cache: Access denied. You might not have administrative credentials to perform this task.       &lt;br /&gt;Contact your system administrator for assistance&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That was because the UAC(User Access Control) in Vista. You either need to turn it off, or run cmd as Administrator so you can run the batch file.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-1769624478058994313?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2008/11/fail-to-add-assembly-to-gac-on-vista.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-564132058767321617</guid><pubDate>Mon, 01 Oct 2007 21:43:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.061-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to convert image between different format?</title><description>&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// Convert image file to certain format&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="fromImageFullPath"&amp;gt;The original image file&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="toImageFullPath"&amp;gt;The new image file&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="mimeType"&amp;gt;The format of the new image file, i.e. "image/bmp", "image/jpeg"&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ConvertImage(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fromImageFullPath, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; toImageFullPath, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; mimeType)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Read the content of the image file into a bitmap variable&lt;/span&gt;&lt;br /&gt;        Stream fromFile = File.OpenRead(fromImageFullPath);&lt;br /&gt;        Image image = Image.FromStream( fromFile, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; ) ;&lt;br /&gt;        Bitmap bitmap = (Bitmap) image;&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Instantiate the encoder&lt;/span&gt;&lt;br /&gt;        EncoderParameters encoderParams = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EncoderParameters();&lt;br /&gt;        encoderParams.Param[0] = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EncoderParameter( Encoder.Quality, 50L );&lt;br /&gt;        ImageCodecInfo codecInfo = GetEncoderInfo( mimeType );&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Covert the image to the new format&lt;/span&gt;&lt;br /&gt;        MemoryStream newImage = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MemoryStream();&lt;br /&gt;        bitmap.Save( newImage, codecInfo, encoderParams );&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Write the new image into a file&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] data = newImage.ToArray();&lt;br /&gt;        Stream toFile = File.OpenWrite( toImageFullPath );&lt;br /&gt;        toFile.Write(data,0,data.GetLength(0));&lt;br /&gt;        fromFile.Close();&lt;br /&gt;        toFile.Close();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(Exception ex)&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// Get encoder infor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="mimeType"&amp;gt;the codec's Multipurpose Internet Mail Extensions (MIME) type&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;All pertinent information about the installed image codecs&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; ImageCodecInfo GetEncoderInfo(String mimeType)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; j;&lt;br /&gt;    ImageCodecInfo[] encoders;&lt;br /&gt;    encoders = ImageCodecInfo.GetImageEncoders();&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt;(j = 0; j &amp;lt; encoders.Length; ++j)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(encoders[j].MimeType == mimeType)&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; encoders[j];&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-564132058767321617?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/10/how-to-convert-image-between-different.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-482121522643754989</guid><pubDate>Mon, 01 Oct 2007 21:40:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.061-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to print a TIF file?</title><description>&lt;p&gt;The following code is in C#. &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;// Print TIF file&lt;/span&gt;&lt;br /&gt;PrintDocument printDocument = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PrintDocument();&lt;br /&gt;printDocument.PrinterSettings.PrinterName = printerIdentifier;&lt;br /&gt;printDocument.PrintPage += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PrintPageEventHandler(printDocument_PrintPage);&lt;br /&gt;printDocument.Print();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// This event occurs when the output to print for the current page is needed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="sender"&amp;gt;sender&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="e"&amp;gt;an argument of type PrintPageEventArgs containing data related to this event&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; printDocument_PrintPage(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, PrintPageEventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        Graphics g = e.Graphics;&lt;br /&gt;        Stream fs = File.OpenRead(_fileName);&lt;br /&gt;        Image image = Image.FromStream( fs, &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; ) ;&lt;br /&gt;        g.DrawImage(image,0,0);&lt;br /&gt;        fs.Close();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(Exception ex)&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-482121522643754989?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/10/how-to-print-tif-file.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-4146322512336953864</guid><pubDate>Mon, 01 Oct 2007 21:36:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.062-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to read the content of a file into Byte and write Byte to a file?</title><description>&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] ReadFileToByte(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileName)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] data = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Check whether the image file exists or not&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (fileName == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; || fileName.Length &amp;lt;= 0 || !File.Exists(fileName)) &lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; data;&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Open the image file&lt;/span&gt;&lt;br /&gt;        FileStream fs = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileStream(fileName, FileMode.Open, FileAccess.Read);&lt;br /&gt;        BinaryReader br = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BinaryReader(fs);&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Read the image into the byte variable&lt;/span&gt;&lt;br /&gt;        data = br.ReadBytes((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)fs.Length);&lt;br /&gt;&lt;br /&gt;        br.Close();&lt;br /&gt;        fs.Close();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(Exception ex)&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; data;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// Write the content of a byte variable into a file&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="data"&amp;gt;The byte variable&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="fileName"&amp;gt;The name of the target file&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; WriteByteToFile(&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] data, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileName)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Check whether there is data in the byte variable&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((data==&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) || (data.Length&amp;lt;=0)) &lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (fileName==&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;||fileName.Trim()==String.Empty)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Open the target file. If it doesn't exist, create it.&lt;/span&gt;&lt;br /&gt;        FileStream fs = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);&lt;br /&gt;        BinaryWriter bw = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BinaryWriter(fs);&lt;br /&gt;        &lt;span style="color: #008000"&gt;// Write the content of the byte variable into the file&lt;/span&gt;&lt;br /&gt;        bw.Write(data);&lt;br /&gt;&lt;br /&gt;        bw.Flush();&lt;br /&gt;        bw.Close();&lt;br /&gt;        fs.Close(); &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(Exception ex)&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-4146322512336953864?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/10/how-to-read-content-of-file-into-byte.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-5779186443041414732</guid><pubDate>Mon, 01 Oct 2007 21:29:00 +0000</pubDate><atom:updated>2009-08-14T20:13:14.025-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to print PDF using GhostScript?</title><description>&lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #008000"&gt;// Print PDF file using GhostScript&lt;/span&gt;&lt;br /&gt;System.Diagnostics.ProcessStartInfo startInfo = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ProcessStartInfo();&lt;br /&gt;startInfo.Arguments = &lt;span style="color: #006080"&gt;&amp;quot; -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=&amp;quot;&lt;/span&gt; + Convert.ToString(numberOfCopies) + &lt;span style="color: #006080"&gt;&amp;quot; -sDEVICE=ljet4 -sOutputFile=\&amp;quot;\\\\spool\\&amp;quot; + &lt;br /&gt;printerIdentifier + &amp;quot;&lt;/span&gt;\&lt;span style="color: #006080"&gt;&amp;quot; \&amp;quot;&amp;quot;&lt;/span&gt; + _fileName + &lt;span style="color: #006080"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;startInfo.FileName = ConfigurationSettings.AppSettings[&lt;span style="color: #006080"&gt;&amp;quot;GhostScriptPath&amp;quot;&lt;/span&gt;].ToString();&lt;br /&gt;startInfo.UseShellExecute = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;System.Diagnostics.Process process = Process.Start(startInfo);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p style="mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-5779186443041414732?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/10/how-to-print-pdf-using-ghostscript.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-6764393326956474485</guid><pubDate>Sat, 01 Sep 2007 21:14:00 +0000</pubDate><atom:updated>2009-08-14T20:22:35.666-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to generate PDF using ComponentOne?</title><description>&lt;p class="MsoNormal"&gt;In earlier project, &lt;a href="http://dotnetideasblog.blogspot.com/2006/12/how-to-use-powerbuilder-to-create-pdf.html"&gt;I used PowerBuilder to generate PDF&lt;/a&gt;. I ran into a lot of issues. But once I had all those figured out, it was not too bad.&amp;#160; &lt;/p&gt;  &lt;p&gt;Later we bought ComponentOne components for .NET. They have variety features including generate PDF files. So we decided to use it in future projects.&amp;#160; &lt;/p&gt;  &lt;p&gt;Using it is straight forward, but there are some tricks. In this project, we have some RTF templates. We need to load them, replace the text in those placeholders, merge them together and output to a PDF file.&amp;#160; &lt;/p&gt;  &lt;h4&gt;Instantiation &lt;/h4&gt;  &lt;p class="MsoNormal"&gt;First I instantiate the &lt;span style="font-family: &amp;#39;Courier New&amp;#39;; color: black; font-size: 10pt"&gt;c1PrintDocument1 &lt;/span&gt;&lt;/p&gt;  &lt;div&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;C1PrintDocument c1PrintDocument1 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; C1.C1PrintDocument.C1PrintDocument();&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;h4&gt;Set header and footer&lt;/h4&gt;

&lt;p&gt;The following code shows how to set header in c1PrintDocument1. This one has table layout. On the left there is a logo bitmap image. The second column is a spacer. The third column displays the title of the document. The forth column shows the page numbers. Set footer is similar to header.&lt;/p&gt;

&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-family: &amp;#39;Courier New&amp;#39;; color: black; font-size: 10pt"&gt;&lt;/span&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SetHeaderWithLogo(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; header)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Prepare a style template for the page header and footer&lt;/span&gt;&lt;br /&gt;    RenderTable headerTable = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RenderTable(c1PrintDocument1);&lt;br /&gt;    headerTable.Style.Borders.AllEmpty = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;    headerTable.StyleTableCell.BorderTableHorz.Empty = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;    headerTable.StyleTableCell.BorderTableVert.Empty = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    headerTable.Columns.AddSome(4);&lt;br /&gt;    headerTable.Body.Rows.AddSome(1);&lt;br /&gt; &lt;br /&gt;    &lt;span style="color: #008000"&gt;// set columns' widths and alignments&lt;/span&gt;&lt;br /&gt;    headerTable.Columns[0].WidthStr = &lt;span style="color: #006080"&gt;&amp;quot;25%&amp;quot;&lt;/span&gt;;&lt;br /&gt;    headerTable.Columns[0].StyleTableCell.ImageAlign.AlignHorz = ImageAlignHorzEnum.Left;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; assemblyName = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetType().Namespace;&lt;br /&gt;    System.Reflection.Assembly a = System.Reflection.Assembly.Load(assemblyName);&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; logoImage = &lt;span style="color: #006080"&gt;&amp;quot;logo.gif&amp;quot;&lt;/span&gt;;&lt;br /&gt;    Image image = Image.FromStream(a.GetManifestResourceStream(assemblyName + &lt;span style="color: #006080"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; + logoImage));&lt;br /&gt;    RenderImage renderImage = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RenderImage(headerTable.Document);&lt;br /&gt;    renderImage.Image = image;&lt;br /&gt;    headerTable.Body.Cell(0, 0).RenderObject = renderImage;&lt;br /&gt; &lt;br /&gt;    headerTable.Columns[1].WidthStr = &lt;span style="color: #006080"&gt;&amp;quot;10%&amp;quot;&lt;/span&gt;;&lt;br /&gt;    headerTable.Columns[2].WidthStr = &lt;span style="color: #006080"&gt;&amp;quot;35%&amp;quot;&lt;/span&gt;;&lt;br /&gt;    headerTable.Columns[2].StyleTableCell.TextAlignHorz = AlignHorzEnum.Center;&lt;br /&gt;    headerTable.Columns[2].StyleTableCell.AlignChildrenVert = AlignVertEnum.Bottom;&lt;br /&gt;    headerTable.Columns[2].StyleTableCell.Font = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Font(&lt;span style="color: #006080"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 14, FontStyle.Bold);&lt;br /&gt;    headerTable.Body.Cell(0, 2).RenderText.Text = header;&lt;br /&gt; &lt;br /&gt;    headerTable.Columns[3].WidthStr = &lt;span style="color: #006080"&gt;&amp;quot;30%&amp;quot;&lt;/span&gt;;&lt;br /&gt;    headerTable.Columns[3].StyleTableCell.TextAlignHorz = AlignHorzEnum.Right;&lt;br /&gt;    headerTable.Columns[3].StyleTableCell.Font = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Font(&lt;span style="color: #006080"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 10, FontStyle.Bold);&lt;br /&gt; &lt;br /&gt;    headerTable.Body.Cell(0, 3).RenderText.Text = &lt;span style="color: #006080"&gt;&amp;quot;Page [@@PageNo@@] of [@@PageCount@@]&amp;quot;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;    c1PrintDocument1.PageHeader.RenderObject = headerTable;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;br /&gt;

&lt;p class="MsoNormal"&gt;Here is how to set the height&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;c1PrintDocument1.PageHeader.Height = height;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;Page settings&lt;/h4&gt;

&lt;p class="MsoNormal"&gt;You can set the page settings the following way. However, there is something need to be mentioned. If the printer the application output to is a network printer, you will receive “No printers installed” exception when execute the following line. You will need to setup a local printer using IP address of the network printer. &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SetPageSettings(System.Drawing.Printing.PageSettings pageSettings)&lt;br /&gt;        {&lt;br /&gt;            c1PrintDocument1.PageSettings = pageSettings;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;h4&gt;Render content &lt;/h4&gt;

&lt;p&gt;You can render plain text or RTF text using following code.&lt;/p&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;c1PrintDocument1.StartDoc();&lt;br /&gt;c1PrintDocument1.RenderBlockText(contextText);&lt;br /&gt; &lt;br /&gt;RenderRichText obj = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RenderRichText(c1PrintDocument1);&lt;br /&gt;obj.Rtf = contentRTFText;&lt;br /&gt;c1PrintDocument1.RenderBlockRichText(obj.Rtf);&lt;br /&gt;&lt;br /&gt;c1PrintDocument1.EndDoc();&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p class="MsoNormal"&gt;Sometimes you may want the whole block of text to be printed on one page, you need to check the available height and start a new page if necessary.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (c1PrintDocument1.AvailableBlockFlowHeight &amp;lt; c1PrintDocument1.MeasureBlock(obj).Height) c1PrintDocument1.NewPage() &lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;Print different header between pages&lt;/h4&gt;

&lt;p&gt;If you want to print different header on the first page and the rest of pages, you will need to write code in NewPageSetup event&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;c1PrintDocument1.NewPageSetup += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NewPageSetupEventHandler(c1PrintDocument1_NewPageSetup);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; c1PrintDocument1_NewPageSetup(C1PrintDocument sender, NewPageSetupEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000"&gt;// We will need only change the setting for the first two pages. The rest of pages will be as same as the second page&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Header != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; Header != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (HeaderOnPageOneOnly != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; HeaderOnPageOneOnly != &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (sender.PageCount == 1) SetHeader(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (sender.PageCount == 2) SetHeader(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (sender.PageCount == 1) SetHeader();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;h4&gt;Print PDF document&lt;/h4&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; PrintDocument(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; printerIdentifier, &lt;span style="color: #0000ff"&gt;short&lt;/span&gt; numberOfCopies)&lt;br /&gt;        {&lt;br /&gt;            System.Drawing.Printing.PrinterSettings settings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; System.Drawing.Printing.PrinterSettings();&lt;br /&gt;            settings.PrinterName = printerIdentifier;&lt;br /&gt;            settings.Copies = numberOfCopies;&lt;br /&gt;            &lt;br /&gt;            c1PrintDocument1.Print(settings, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-6764393326956474485?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/09/how-to-generate-pdf-using-componentone.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-654367693869120395</guid><pubDate>Fri, 18 May 2007 17:21:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.063-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>Code snippet</title><description>&lt;p class="western" style="margin-bottom: 0in"&gt;Code snippet is a nice feature Microsoft provided in Visual Studio 2005. But surprisingly there is still not a lot people know how to take advantage of it. Many people think it is no different from copying and pasting existing code. Well, there is difference. The code snippet is right at your mouse click while you have to search the code to find the one you want to copy over. Also don’t you have had those moments when you know .NET can do something, but you don’t know exact name of the class or method. Code snippet also can help you with that. This is just one of the many features Visual Studio has to help developers to become more efficient. You may find more information at &lt;font color="#0000ff"&gt;&lt;u&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms165392(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms165392(VS.80).aspx&lt;/a&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;How to use existing code snippet&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;1. In the code editor, place cursor at the place you want to put the code snippet and right click. Then click on “Insert Snippet” on the pop-up menu.&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;&lt;img height="182" src="http://docs.google.com/File?id=dhngn32w_1gtnf4zk9_b" width="282" align="bottom" border="0" name="graphics1"&gt;&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;2. A pop-up menu with code snippet category will show up. You may choose a category, then choose the code snippet from the list. Here I select one of my favorite – the property&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;&lt;img height="146" src="http://docs.google.com/File?id=dhngn32w_2fb82gvhr_b" width="281" align="bottom" border="0" name="graphics2"&gt;&lt;img height="123" src="http://docs.google.com/File?id=dhngn32w_3g8s5h8f8_b" width="307" align="bottom" border="0" name="graphics3"&gt;&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;3. It will automatically insert the following code. I can then tab through the green highlighted fields to make any change. For example, when I change “myVar” to “customerName”, VS will automatically change all of them for me.&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;&lt;img height="131" src="http://docs.google.com/File?id=dhngn32w_4cmpw5wdd_b" width="252" align="bottom" border="0" name="graphics4"&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;How to create your own code snippet and share with others&lt;/p&gt;&lt;br&gt; &lt;p class="western" style="margin-bottom: 0in"&gt;1. Create an xml file in the following format. Here I use a code snippet I created for my project. It is very straightforward. You name it with the .snippet file name extension. Save it to a folder you want to put all your code snippets.&lt;/p&gt;&lt;br&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;CodeSnippets&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;CodeSnippet&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Format&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0.0"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        Create FindByXXX in Mapping layer&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Snippet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Declarations&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ReturnType&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with return type.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;DomainObjectBase&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;MethodName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with method name.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;MethodName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ParameterType&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with parameter type.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;string&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ParameterName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with parameter name.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;p&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;VariableName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with variable name.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;var&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;TableWrapperName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with table wrapper name.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;xxxDO&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;TableWrapperMethodName&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Replace with table wrapper method name.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ToolTip&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;GetListAsDataReaderXXX&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Default&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Literal&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Declarations&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Code&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="CSharp"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;br /&gt;  public $ReturnType$ $MethodName$($ParameterType$ $ParameterName$)&lt;br /&gt;  {&lt;br /&gt;      $ReturnType$ $VariableName$ = null;&lt;br /&gt;      $TableWrapperName$ tableWrapper = new $TableWrapperName$(base._connectionName);&lt;br /&gt;      if (this.ActiveUnitOfWork != null)&lt;br /&gt;      {&lt;br /&gt;      tableWrapper.ActiveUnitOfWork = this.ActiveUnitOfWork;&lt;br /&gt;      }&lt;br /&gt;      System.Data.IDataReader dr = null;&lt;br /&gt;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;      dr = tableWrapper.$TableWrapperMethodName$($ParameterName$);&lt;br /&gt;      if (dr.Read())&lt;br /&gt;      {&lt;br /&gt;      $VariableName$ = new $ReturnType$();&lt;br /&gt;      $VariableName$ = ($ReturnType$)base.Load($VariableName$, (IDataRecord)dr, dr.GetSchemaTable());&lt;br /&gt;      }&lt;br /&gt;      }&lt;br /&gt;      finally&lt;br /&gt;      {&lt;br /&gt;      if (dr != null &amp;amp;&amp;amp; !dr.IsClosed) dr.Close();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      return $VariableName$;&lt;br /&gt;      }&lt;br /&gt;      ]]&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Code&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Snippet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;br&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in"&gt;&lt;font color="#000000"&gt;2. Go to “Tool”-&amp;gt;”Code Snippets Manager”. Click on “Add…” to add your folder. Now it is ready for you to use&lt;/font&gt;.&lt;/p&gt;&lt;br&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in"&gt;&lt;img height="416" src="http://docs.google.com/File?id=dhngn32w_5d2phnddc_b" width="553" align="bottom" border="0" name="graphics5"&gt;&lt;/p&gt;&lt;br&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in"&gt;&lt;font color="#000000"&gt;There are a lot of useful code snippets on the Internet, you can download and add to your collection. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in"&gt;&lt;font color="#000000"&gt;By the way, I just learned a little trick about code copying. You can drag and drop any code block to the Toolbox, then drag and drop it back to anywhere you want. You can even give it a name. If you don’t know this trick, you may want to check it out. &lt;/font&gt;&lt;/p&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-654367693869120395?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2007/05/code-snippet.html</link><author>noreply@blogger.com (DotNetIdeas)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-1223591451870969188</guid><pubDate>Sat, 04 Nov 2006 17:22:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.063-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to communicate between .NET and Powerbuilder application?</title><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;&amp;nbsp;&lt;/h2&gt; &lt;p&gt;This is an article I wrote long time ago. The Powerbuilder version was 9.0, .NET was 1.1&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Calling .NET class/method from Powerbuilder&lt;/h3&gt; &lt;ol style="margin-top: 0in" type="1"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Create .Net class and add a test method&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZOv3EGaI/AAAAAAAAAIk/zOzR8qFe67c/clip_image002%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="clip_image002" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZPG2ccBI/AAAAAAAAAIo/0PNcnvfEuaM/clip_image002_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1025"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="2"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Compile the solution.  &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Create a key pair for signing the assembly with a strong name. See &lt;a href="http://msdn2.microsoft.com/en-us/library/6f05ezxy(VS.71).aspx"&gt;&lt;span style="color: windowtext; text-decoration: none; text-underline: none"&gt;Creating a key pair&lt;/span&gt;&lt;/a&gt; for detail.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;For example, c:\yourpath&amp;gt;sn –k DotNetIdeas.snk&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="4"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Add the key file to your project&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZPTovAfI/AAAAAAAAAIs/xRQ_T5qlnL8/clip_image004%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="clip_image004" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZP67Pj8I/AAAAAAAAAIw/SZohrNu2THM/clip_image004_thumb.jpg" width="196" border="0" v:shapes="_x0000_i1026"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="5"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Modify AssemblyInfo.cs&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;a href="http://lh5.ggpht.com/_ElXg_EOWn5c/SR2ZQVZC3rI/AAAAAAAAAI0/hQF5-Za4Hac/clip_image006%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="36" alt="clip_image006" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZQvqC-6I/AAAAAAAAAI4/hrc6R4L_UPE/clip_image006_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1027"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="6"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Add the assembly to GAC&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;You may go to control panel or use command line(gacutil /i DotNetIdeas.Interop.dll)&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="7"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Register the assembly using regasm tool. &lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;regasm DotNetIdeas.Interop.dll&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;The following message is copied from MSDN&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;The Assembly Registration tool reads the metadata within an assembly and adds the necessary entries to the registry, which allows COM clients to create .NET Framework classes transparently. Once a class is registered, any COM client can use it as though the class were a COM class. The class is registered only once, when the assembly is installed. Instances of classes within the assembly cannot be created from COM until they are actually registered.&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;To unregister, call regasm /u yourdll.dll&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="8"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Create a Powerbuilder application with a simple window. The window has a static text control and a button.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SR2ZQ7verJI/AAAAAAAAAI8/ydX0CuiDs0A/clip_image008%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="clip_image008" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZRecJodI/AAAAAAAAAJA/fkmFHYlPpAA/clip_image008_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1028"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="9"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Add following code in the click event of the button&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SR2ZRTCY4PI/AAAAAAAAAJE/H9vvMWWzvTg/clip_image010%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="clip_image010" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZSOJkqjI/AAAAAAAAAJI/PyzSUWY8Ybw/clip_image010_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1029"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="10"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo1"&gt;Now compile and run the application. Click on the “Hello .NET” button, you will receive the response from the .NET class we created above.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh5.ggpht.com/_ElXg_EOWn5c/SR2ZSRQ-S4I/AAAAAAAAAJM/htVpJhPHrTQ/clip_image012%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="clip_image012" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZTGpY4tI/AAAAAAAAAJQ/GeP7cPmfKsE/clip_image012_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1030"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;h3&gt;Calling Powerbuilder object/method from .NET&lt;/h3&gt; &lt;ol style="margin-top: 0in" type="1"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Create a non-visual user object with a method uf_hello&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZTRXTp8I/AAAAAAAAAJU/mo29f7JMgTI/clip_image014%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="68" alt="clip_image014" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZTu209gI/AAAAAAAAAJY/6CKQyPav-5c/clip_image014_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1031"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="2"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Create a project object using the COM/MTS/COM+ Component Wizard. You may change the name and you will need to choose which user object to be deployed to the COM component server. You don’t have to change anything other than that. Just click Next all the way through.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZUPg2QFI/AAAAAAAAAJc/k6qn-0zvCAI/clip_image016%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="154" alt="clip_image016" src="http://lh5.ggpht.com/_ElXg_EOWn5c/SR2ZUaNi3fI/AAAAAAAAAJg/iSaSakRmbf0/clip_image016_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1032"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="3"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Deploy the project. You will see something similar to the following screen. This will generate a COM dll. Here is testpb.dll&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;&lt;a href="http://lh5.ggpht.com/_ElXg_EOWn5c/SR2ZUsNFzlI/AAAAAAAAAJk/tu9wmQJL2rA/clip_image018%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="148" alt="clip_image018" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SR2ZVdUd6mI/AAAAAAAAAJo/k4D3WJ9NHcI/clip_image018_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1033"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="4"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Use the &lt;a href="http://msdn2.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx"&gt;Type Library Importer&lt;/a&gt; converts the type definitions found within a COM type library into equivalent definitions in a common language runtime assembly&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;&amp;gt;tlbimp testpb.dll /keyfile:DotNetIdeas.snk /out:NetTestPB.dll &lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="5"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Register both COM dll and .NET dll&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&amp;gt;regsvr32 testpb.dll&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&amp;gt;regasm NetTestPB.dll&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="6"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Create a .NET windows application with a form looks like the form below. It has a label and a button. (Here I re-used the project I created in previous section.)&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZV4J5QRI/AAAAAAAAAJs/fOB1SBCvypw/clip_image020%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="clip_image020" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZWKDI9PI/AAAAAAAAAJw/FRLFn1uix0E/clip_image020_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1034"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="7"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Add reference to the DLL we created above&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZWgVedMI/AAAAAAAAAJ0/J8tnMdaSzb8/clip_image022%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="164" alt="clip_image022" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZW9UNGoI/AAAAAAAAAJ4/iVm1N-IZ0Fk/clip_image022_thumb.jpg" width="198" border="0" v:shapes="_x0000_i1035"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="8"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Add the following code to the click event of the button. You may notice that the Powerbuilder class has weird long name. That was generated when you use the COM component wizard. You can give it more readable name.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.5in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZXG7EURI/AAAAAAAAAJ8/cwlIw_uWOoY/clip_image024%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="35" alt="clip_image024" src="http://lh5.ggpht.com/_ElXg_EOWn5c/SR2ZXi9JbKI/AAAAAAAAAKA/iT7v7fXUMEs/clip_image024_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1036"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="9"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo2"&gt;Build and run the application. Click on the button. This is what you will see.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="text-indent: 0.5in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SR2ZXx_ef_I/AAAAAAAAAKE/7WyySMQlsg0/clip_image026%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="133" alt="clip_image026" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZYUD_JMI/AAAAAAAAAKI/F_7jsl77k40/clip_image026_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1037"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;h4&gt;Caution: How to call Powerbuilder COM component from .NET web page/web services?&lt;/h4&gt; &lt;p class="MsoNormal"&gt;If you want to use the same code we showed above to call Powerbuilder COM component from .NET web application, you may receive “System.NullReferenceException: Object reference not set to an instance of an object.” exception. That is because the Powerbuilder COM component we created above is single tread. To make .NET initialize an STA, you have to explicitly indicate that this is your intention. Here is how you would do it from a web service&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-1223591451870969188?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2006/11/how-to-communicate-between-net-and.html</link><author>noreply@blogger.com (DotNetIdeas)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_ElXg_EOWn5c/SR2ZPG2ccBI/AAAAAAAAAIo/0PNcnvfEuaM/s72-c/clip_image002_thumb.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1850047779793623762.post-3822530385440949949</guid><pubDate>Thu, 26 Oct 2006 17:14:00 +0000</pubDate><atom:updated>2009-01-22T14:29:38.064-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>.NET General</category><title>How to use Composite UI to build a simple winform application?</title><description>&lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;h2&gt;Preparation&lt;/h2&gt; &lt;ol style="margin-top: 0in" type="1"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l0 level1 lfo3"&gt;Create a black solution, i.e. HelloWorld&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh21I-lrI/AAAAAAAAANk/w7QeKpnxq_s/clip_image002%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" alt="clip_image002" src="http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh3HLko_I/AAAAAAAAANo/lsvO6WrgrfY/clip_image002_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1025"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l4 level1 lfo1"&gt;Open File Explorer; create a new folder for CAB source code under the solution folder. You may call it “CompositeUI Source” and copy the CAB source from \\Program Files\Microsoft Composite UI App Block\CSharp\Source to this folder.&lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l4 level1 lfo1"&gt;In Visual Studio, create a new solution folder called “CompositeUI Source”. You may call it whatever you want. &lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l4 level1 lfo1"&gt;Add CAB projects under this folder.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh3dRbHYI/AAAAAAAAANs/LkvIiFxcIJ4/clip_image004%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="162" alt="clip_image004" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh4J7l8FI/AAAAAAAAANw/tjoo5mUyujA/clip_image004_thumb.jpg" width="236" border="0" v:shapes="_x0000_i1026"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;The Shell Application&lt;/h2&gt; &lt;ol style="margin-top: 0in" type="1"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Add a new project under the solution. Here we call it “ShellApplication”. It is a windows application&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh4crAFyI/AAAAAAAAAN0/kLvln08qNKM/clip_image006%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="158" alt="clip_image006" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh4lxZ6kI/AAAAAAAAAN4/ly78B8k0vr0/clip_image006_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1027"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="2"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Add reference to CAB&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh4128tUI/AAAAAAAAAN8/3YRKNHZxBZM/clip_image008%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image008" src="http://lh5.ggpht.com/_ElXg_EOWn5c/SSrh5AZe3jI/AAAAAAAAAOA/U69DHDSlFt8/clip_image008_thumb.jpg" width="150" border="0" v:shapes="_x0000_i1028"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="3"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Rename Form1.cs to MyShellForm.cs (*Note: you can name it whatever you want.)&lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Open MyShellForm in design mode. We will need to add a work space to it. In this example, we will only add one main work space. If you don’t see any work space in you toolbox, you will need to add them from the CAB.&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.75in; text-indent: -0.25in; tab-stops: list .75in; mso-list: l3 level2 lfo4"&gt;&lt;span style="mso-list: ignore"&gt;a.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Right click on “ToolBox” panel, Click on “Choose Items…” from the pop-up menu&lt;/p&gt; &lt;p class="MsoNormal" style="margin-left: 0.75in"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh5sJVVaI/AAAAAAAAAOE/wQ28An3h9Sw/clip_image010%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="clip_image010" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh527e28I/AAAAAAAAAOI/xfbguR8IeBA/clip_image010_thumb.jpg" width="228" border="0" v:shapes="_x0000_i1029"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="4"&gt; &lt;ol style="margin-top: 0in" type="a" start="2"&gt; &lt;li class="MsoNormal" style="tab-stops: list 1.0in; mso-list: l3 level2 lfo4"&gt;Click on “Browse”, then find the Microsoft.Practices.CompositeUI.WinForms.dll in your CAB source directory. If you don’t find it, build your solution first.&lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list 1.0in; mso-list: l3 level2 lfo4"&gt;You will see the workspaces are highlighted in the list. Click on “OK” to close the window. The workspaces should be added to your toolbox&lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list 1.0in; mso-list: l3 level2 lfo4"&gt;We choose DeckWorkspace here and add it to the form. Change the “Dock” property to “Fill” and name it “mainWorkspace”. The form will look like below.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.5in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh6IHQBkI/AAAAAAAAAOM/oVJY0rWcycc/clip_image012%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image012" src="http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh6b1ng0I/AAAAAAAAAOQ/x5uDMbgQAic/clip_image012_thumb.jpg" width="242" border="0" v:shapes="_x0000_i1030"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol style="margin-top: 0in" type="1" start="5"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Rename Program.cs to MyShellApplication.cs (*Note: you can name it whatever you want.)&lt;/li&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;Open MyShellApplication.cs &lt;/li&gt;&lt;/ol&gt; &lt;ol style="margin-top: 0in" type="a"&gt; &lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;Add some using statements&lt;/li&gt;&lt;/ol&gt; &lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Practices.CompositeUI;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Practices.CompositeUI.WinForms;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.25in"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="a" start="2"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;Make the following code change&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ShellApplication&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyShellApplication : FormShellApplication&amp;lt;WorkItem, MyShellForm&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// The main entry point for the application.&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Main()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyShellApplication().Run();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="7"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l3 level1 lfo4"&gt;&lt;span style="mso-no-proof: yes"&gt;Add ProfileCatalog.xml to the ShellApplication project and have the following code added to it. You must name it ProfileCatalog.xml, otherwise CAB won’t be able to recognize it. This file is for loading your modules on the run time. The AssemblyFile attribute is your compiled module name which we will create later.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt; ?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;SolutionProfile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/pag/cab-profile"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Modules&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ModuleInfo&lt;/span&gt; &lt;span style="color: #ff0000"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="HelloWorldModule.dll"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Modules&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;SolutionProfile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Change the “Copy to Output Directory” property to “Copy always”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="text-indent: 0.5in"&gt;&lt;span style="mso-no-proof: yes"&gt;&lt;a href="http://lh5.ggpht.com/_ElXg_EOWn5c/SSrh6tw8dTI/AAAAAAAAAOU/sW2YgCtkGj8/clip_image014%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="136" alt="clip_image014" src="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh69CK6_I/AAAAAAAAAOY/JMEfF2wW7xU/clip_image014_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1031"&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;The Module&lt;/h2&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;Create a new project under the solution. We call it “HelloWorldModule”. It is a Class Library. You can name it whatever you want, but it has to match what you put in the ProfileCatalog.xml&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh4.ggpht.com/_ElXg_EOWn5c/SSrh7MNtWkI/AAAAAAAAAOc/kzXAWVq387Y/clip_image016%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="158" alt="clip_image016" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh7bxmExI/AAAAAAAAAOg/p0MCi4WRzEI/clip_image016_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1032"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="2"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;Add reference to CAB&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh7ufNnYI/AAAAAAAAAOk/iYe1qJGLuRI/clip_image018%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" alt="clip_image018" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh79Ao_sI/AAAAAAAAAOo/QmrJZTiE1L0/clip_image018_thumb.jpg" width="211" border="0" v:shapes="_x0000_i1033"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="3"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;Right click on the project and open “Properties” page. Click on “Build” from the left. Change the “Output Path” to “..\ShellApplication\bin\Debug\” which is your application run-time directory. This step is required, otherwise you will receive “HelloWorldModule.dll” was not found” exception.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh8nbG7YI/AAAAAAAAAOs/TMw4DZJ3fT4/clip_image020%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="205" alt="clip_image020" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh9IcnGdI/AAAAAAAAAOw/AZ1vSeHw5Mg/clip_image020_thumb.jpg" width="244" border="0" v:shapes="_x0000_i1034"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="4"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;Create a new user control and name it “MyView”. We will put our “Hello World!” label here.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in"&gt;&lt;a href="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh9TUGcWI/AAAAAAAAAO0/l6LpKfm4P4Y/clip_image022%5B2%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="203" alt="clip_image022" src="http://lh6.ggpht.com/_ElXg_EOWn5c/SSrh-Ibr1JI/AAAAAAAAAO4/xvDNt95w_FI/clip_image022_thumb.jpg" width="177" border="0" v:shapes="_x0000_i1035"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="5"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;Add a new class called “MyWorkItem” and have the following code added to it.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Practices.CompositeUI;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Practices.CompositeUI.SmartParts;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; HelloWorldModule&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyWorkItem : WorkItem&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Show(IWorkspace workSpace)&lt;br /&gt;        {&lt;br /&gt;            MyView myView = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Items.AddNew&amp;lt;MyView&amp;gt;();&lt;br /&gt;            workSpace.Show(myView);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in" type="1" start="6"&gt;&lt;br /&gt;&lt;li class="MsoNormal" style="tab-stops: list .5in; mso-list: l2 level1 lfo5"&gt;&lt;span style="mso-no-proof: yes"&gt;Add another new class called “MyModuleInit” and add the following code to it. Note that the “mainWorkspace” metioned below is the name of the work space in our shell form. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Practices.CompositeUI;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; HelloWorldModule&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyModuleInit : ModuleInit&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; WorkItem rootWorkItem;&lt;br /&gt;&lt;br /&gt;        [ServiceDependency]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; WorkItem RootWorkItem&lt;br /&gt;        {&lt;br /&gt;            set { rootWorkItem = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Load()&lt;br /&gt;        {&lt;br /&gt;            MyWorkItem myWorkItem = rootWorkItem.WorkItems.AddNew&amp;lt;MyWorkItem&amp;gt;();&lt;br /&gt;            myWorkItem.Show(rootWorkItem.Workspaces[&lt;span style="color: #006080"&gt;"mainWorkspace"&lt;/span&gt;]);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;The End&lt;/h2&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;Now you are ready to run the application. You need to set the startup application before running, though. Good luck!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850047779793623762-3822530385440949949?l=dotnetideasblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</description><link>http://dotnetideasblog.blogspot.com/2006/10/how-to-use-composite-ui-to-build-simple.html</link><author>noreply@blogger.com (DotNetIdeas)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_ElXg_EOWn5c/SSrh3HLko_I/AAAAAAAAANo/lsvO6WrgrfY/s72-c/clip_image002_thumb.jpg' height='72' width='72'/><thr:total>0</thr:total></item></channel></rss>