<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[How to create a C# plugin that uses a non-dockable dialog]]></title><description><![CDATA[<p dir="auto">I want to create a non-dockable dialog in a c# npp plugin dll to collect data needed for a plugin.  The data collected will be written to the plugin ini file and used when the plugin is run.  I’m using VS2019 and I’m a newbie to both VS and C# (I’m a fast learner though).</p>
<p dir="auto">The template I’m using contains a Dockable Dialog Demo and I can follow this.  However, I want to display a non-dockable dialog.  The template contains this text:</p>
<p dir="auto"><strong>// You can create your own non dockable dialog - in this case you don’t need this demonstration.</strong></p>
<p dir="auto">I’m looking for a few things:</p>
<ul>
<li>How do you create and display a non-dockable dialog from within a C#  NPP plugin? I can RTFM if I knew what to look for.</li>
<li>Where can I find how this works architecturally?</li>
<li>Are there any projects that do this that you can refer me to?</li>
</ul>
<p dir="auto"><strong>From Template:</strong></p>
<pre><code>        static void DockableDlgDemo()
        {
            // Dockable Dialog Demo
            // 
            // This demonstration shows you how to do a dockable dialog.
            // You can create your own non dockable dialog - in this case you don't need this demonstration.
            if (frmGoToLine == null)
            {
                frmGoToLine = new frmGoToLine(editor);

                using (Bitmap newBmp = new Bitmap(16, 16))
</code></pre>
<p dir="auto">Any tips, hints will definitely help.  Thanks in advance.</p>
<p dir="auto">Paul</p>
]]></description><link>https://community.notepad-plus-plus.org/topic/25349/how-to-create-a-c-plugin-that-uses-a-non-dockable-dialog</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 23:01:51 GMT</lastBuildDate><atom:link href="https://community.notepad-plus-plus.org/topic/25349.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jan 2024 16:54:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sun, 14 Jan 2024 22:38:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/92016">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">One other warning I have about the plugin pack that you should be aware of…</p>
<p dir="auto">There are a lot of methods (29 by my count) in the ScintillaGateway.cs that look something like this:</p>
</blockquote>
<p dir="auto">Thanks Mark.  I’m still chewing on the dialog.  The JSon Tools plugin is displaying a Settings input dialog which is what I want to do.  I’ll be on the lookout for the unsafe methods and apply your recommendations as needed,  I appreciate your comments.  Thank you!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92068</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92068</guid><dc:creator><![CDATA[Paul Baker]]></dc:creator><pubDate>Sun, 14 Jan 2024 22:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sun, 14 Jan 2024 18:13:02 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/92051">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">I announced <a href="https://community.notepad-plus-plus.org/topic/25361/new-c-plugin-template?_=1705253665767">the new template</a>.</p>
</blockquote>
<p dir="auto">Your C# template and <a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/10071">@ThosRTanner</a>’s docking-dialog-focused C++ template <a href="https://github.com/notepad-plus-plus/npp-usermanual/pull/617" rel="nofollow ugc">will</a> both be linked in the next published release of the user manual.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92052</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92052</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Sun, 14 Jan 2024 18:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sun, 14 Jan 2024 17:50:10 GMT]]></title><description><![CDATA[<p dir="auto">I announced <a href="https://community.notepad-plus-plus.org/topic/25361/new-c-plugin-template?_=1705253665767">the new template</a>.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92051</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92051</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sun, 14 Jan 2024 17:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 22:58:02 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/3841">@PeterJones</a> said in <a href="/post/92030">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Will you mind if I link it to your fork instead, once it’s ready?</p>
</blockquote>
<p dir="auto">Sure!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92031</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92031</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sat, 13 Jan 2024 22:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 22:32:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a>,</p>
<blockquote>
<p dir="auto">As it so happens, I started working on my own take on the plugin template yesterday. I’m going to try to release it to GitHub today.</p>
</blockquote>
<p dir="auto">The User Manual currently links to the kblisted template.  Will you mind if I link it to your fork instead, once it’s ready?</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92030</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92030</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Sat, 13 Jan 2024 22:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 20:51:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/24325">@rdipardo</a> said in <a href="/post/92019">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Dude, kbilsted’s project was just archived. Maybe now’s the time to consider releasing a fresh template from your fork?</p>
</blockquote>
<p dir="auto">I figured it was only a matter of time…<br />
I don’t blame him; maintaining something like that is a lot of work.</p>
<p dir="auto">As it so happens, I started working on my own take on the plugin template yesterday. I’m going to try to release it to GitHub today.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92020</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92020</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sat, 13 Jan 2024 20:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 20:45:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/92016">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">I could submit a PR, but kbilsted rarely actually does anything about them, so here is as good a place as any.</p>
</blockquote>
<p dir="auto">Dude, <a href="https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net" rel="nofollow ugc">kbilsted’s project</a> was just archived. Maybe now’s the time to consider releasing a fresh template from your fork?</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92019</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92019</guid><dc:creator><![CDATA[rdipardo]]></dc:creator><pubDate>Sat, 13 Jan 2024 20:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 19:40:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/30017">@Paul-Baker</a><br />
One other <strong>warning</strong> I have about the plugin pack that you should be aware of…</p>
<p dir="auto">There are a lot of methods (29 by my count) in the <code>ScintillaGateway.cs</code> that look something like this:</p>
<pre><code>public unsafe string DescriptionOfStyle(int style)
{
    byte[] descriptionBuffer = new byte[10000];
    fixed (byte* descriptionPtr = descriptionBuffer)
    {
        Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIPTIONOFSTYLE, (IntPtr) style, (IntPtr) descriptionPtr);
        return Encoding.UTF8.GetString(descriptionBuffer).TrimEnd('\0');
    }
}
</code></pre>
<p dir="auto">Unsafe methods like this may be scary when you’re new to C#, but the basic idea is this:</p>
<ol>
<li>A buffer is allocated of size 10000</li>
<li>a pointer to that buffer is passed to Scintilla as the <code>lParam</code>, and the <code>style</code> argument to the C# method is passed in as the <code>wParam</code>.</li>
<li>Scintilla fills the buffer that was passed in</li>
<li>He decodes the string and strips off the NULL chars.</li>
</ol>
<p dir="auto"><strong>THIS IS NOT THE RIGHT WAY TO DO THESE THINGS BECAUSE 10000 MIGHT BE TOO SMALL (LEADING TO BUFFER OVERFLOW) OR TOO LARGE (LEADING TO WASTE).</strong></p>
<p dir="auto">Regarding methods where the user passes in a buffer to be filled (<code>char *</code>), <a href="https://www.scintilla.org/ScintillaDoc.html" rel="nofollow ugc">the Scintilla documentation says</a>:</p>
<pre><code>Arguments point at text buffers that Scintilla will fill with text.
In some cases, another argument will tell Scintilla the buffer size.
    In others, you must make sure that the buffer is big enough to hold the requested text.
If a NULL pointer (0) is passed then, for SCI_* calls,
    the length that should be allocated, not including any terminating NUL, is returned.
Some calls (marked "NUL-terminated") add a NUL character to the result but other calls do not:
    to generically handle both types, allocate one more byte than indicated and set it to NUL.
</code></pre>
<p dir="auto">Instead I recommend doing the following:</p>
<ol>
<li>add the methods shown below to <code>ScintillaGateway.cs</code></li>
<li>In the above example, with <code>SciMsg.SCI_DESCRIPTIONOFSTYLE</code> as the Scintilla message and <code>int length</code> as a parameter to the C# method, replace the entire body of the method with<pre><code class="language-cs">return GetNullStrippedStringFromMessageThatReturnsLength(SciMsg.SCI_DESCRIPTIONOFSTYLE, (IntPtr)style);
</code></pre>
</li>
<li>If the C# method does not have a parameter (say for <code>public unsafe string GetWhitespaceChars()</code>, I would replace the whole body of the function with<pre><code class="language-cs">return GetNullStrippedStringFromMessageThatReturnsLength(SciMsg.SCI_GETWHITESPACECHARS);
</code></pre>
Note that in this case the optional <code>wParam</code> argument is not supplied.</li>
</ol>
<p dir="auto">In any case, here is the <code>GetNullStrippedStringFromMessageThatReturnsLength</code> method in my proposed fix.</p>
<pre><code class="language-cs">/// &lt;summary&gt;
/// returns bytes decoded from UTF-8 as a string, with all trailing NULL bytes stripped off.
/// &lt;/summary&gt;
public static string Utf8BytesToNullStrippedString(byte[] bytes)
{
    int lastNullCharPos = bytes.Length - 1;
    // this only bypasses NULL chars because no char
    // other than NULL can have any 0-valued bytes in UTF-8.
    // See https://en.wikipedia.org/wiki/UTF-8#Encoding
    for (; lastNullCharPos &gt;= 0 &amp;&amp; bytes[lastNullCharPos] == '\x00'; lastNullCharPos--) { }
    return Encoding.UTF8.GetString(bytes, 0, lastNullCharPos + 1);
}

/// &lt;summary&gt;
/// Recall that all Scintilla methods have the signature 
/// (scintilla* scin, SciMsg msg, void* wParam, void* lParam) -&amp;gt; void*&lt;br&gt;&lt;/br&gt;
/// Many of these scintilla methods are bimodal in the following way&lt;br&gt;&lt;/br&gt;
/// * if lParam is 0, return the length of the buffer to be filled and have no side effects. The wParam may be involved in telling Scintilla how big the buffer needs to be.&lt;br&gt;&lt;/br&gt;
/// * if lParam is greater than 0, it is assumed to be a pointer to a buffer. Now the wParam indicates what the text will need to be.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;
/// This sets lParam to 0 to get the length, allocates a buffer of that length,&lt;br&gt;&lt;/br&gt;
/// uses the second mode to fill a buffer,&lt;br&gt;&lt;/br&gt;
/// and returns a string of the UTF8-decoded buffer with all trailing '\x00' chars stripped off.
/// &lt;/summary&gt;
/// &lt;param name="msg"&gt;message to send&lt;/param&gt;
/// &lt;param name="wParam"&gt;another parameter for defining what the buffer should contain&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
private unsafe string GetNullStrippedStringFromMessageThatReturnsLength(SciMsg msg, IntPtr wParam=default)
{
    int length = Win32.SendMessage(scintilla, msg, wParam, (IntPtr)Unused).ToInt32();
    byte[] textBuffer = new byte[length];
    fixed (byte* textPtr = textBuffer)
    {
        Win32.SendMessage(scintilla, msg, wParam, (IntPtr)textPtr);
        return Utf8BytesToNullStrippedString(textBuffer);
    }
}
</code></pre>
<p dir="auto">I could submit a PR, but kbilsted rarely actually does anything about them, so here is as good a place as any.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92016</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92016</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sat, 13 Jan 2024 19:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 15:09:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> Thank you Mark and <a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/27184">@Coises</a>.  This will definitely help.  Now I have something to chew on for awhile.  I’ll provide an update once I get a POC working. Much appreciated!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/92009</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92009</guid><dc:creator><![CDATA[Paul Baker]]></dc:creator><pubDate>Sat, 13 Jan 2024 15:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 04:07:04 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/27184">@Coises</a> said in <a href="/post/91999">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Are you sure about that? According to the documentation, DMM_SHOW is for dialogs that were registered as docking dialogs.</p>
</blockquote>
<p dir="auto">Well spotted!</p>
<p dir="auto">I’ve edited the above post to reflect the correct way to deal with these kinds of things.</p>
<p dir="auto">As for the correct way to hide non-docking forms, <a href="https://learn.microsoft.com/en-us/dotnet/desktop/winforms/?view=netframeworkdesktop-4.8" rel="nofollow ugc">use this documentation</a></p>
]]></description><link>https://community.notepad-plus-plus.org/post/92000</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/92000</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sat, 13 Jan 2024 04:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 03:46:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/91998">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_DMMSHOW, 0, nonDockableForm.Handle);</p>
</blockquote>
<p dir="auto">Disclaimer: I don’t know C#, just C++.</p>
<p dir="auto">Are you sure about that? According to the documentation, <a href="https://npp-user-manual.org/docs/plugin-communication/#2054-nppm-dmmshow" rel="nofollow ugc">DMM_SHOW</a> is for dialogs that were registered as docking dialogs.</p>
<p dir="auto">Wouldn’t you just use <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.form.showdialog" rel="nofollow ugc">ShowDialog</a> for modal dialogs and <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.form.show" rel="nofollow ugc">Show</a> for non-modal dialogs (along with sending <a href="https://npp-user-manual.org/docs/plugin-communication/#2036-nppm-modelessdialog" rel="nofollow ugc">NPPM_MODELESSDIALOG</a> if you want your non-modal dialog to capture and process keyboard navigation and menu accelerators rather than having those keystrokes directed to Notepad++)?</p>
]]></description><link>https://community.notepad-plus-plus.org/post/91999</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/91999</guid><dc:creator><![CDATA[Coises]]></dc:creator><pubDate>Sat, 13 Jan 2024 03:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 04:05:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/30017">@Paul-Baker</a> said in <a href="/post/91996">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Is there a way to show the DarkModeTestForm when a plugin is invoked?</p>
</blockquote>
<h3>this has been heavily edited pursuant to Coises’ post below</h3>
<p dir="auto">The <a href="https://github.com/molsonkiko/NotepadPlusPlusPluginPack.Net/blob/16d35161bfad02813a2a1ffe48713d395416d0ca/Demo%20Plugin/NppManagedPluginDemo/Demo.cs#L142C45-L142C45" rel="nofollow ugc"><code>Kbg.Demo.Namespace.Main.CommandMenuInit</code> method in <code>Demo.cs</code></a> is where all the plugin commands are declared.</p>
<p dir="auto">The code I’m showing here is not copied verbatim, but it’s similar to the code in the file.</p>
<p dir="auto">In the <code>CommandMenuInit</code> method, you can add a line of code like so:</p>
<pre><code class="language-cs">            // add a command to open the NonDockableForm
            PluginBase.SetCommand(42, "NonDockableForm Demo", NonDockableFormDemo); idNonDockableForm = 42;
</code></pre>
<p dir="auto">references the method <code>NonDockableFormDemo</code>,  which might look like this:</p>
<pre><code class="language-cs">public static void NonDockableFormDemo()
{
    if (nonDockableForm == null || nonDockableForm.IsDisposed)
        nonDockableForm = new nonDockableForm();
    nonDockableForm.Show();
    nonDockableForm.Focus();
}
</code></pre>
<p dir="auto">The main difference between opening a docking form and opening a non-docking form is as follows:</p>
<ul>
<li>With a docking form you need to fill out a struct that tells Notepad++ how the form is going to dock. <strong>With a non-docking form, you just create a new form, and show it.</strong></li>
</ul>
<p dir="auto">It is also good practice to call the <code>Close()</code> method of each form you have in the <code>Kbg.Demo.Namespace.Main.PluginCleanUp</code> method.</p>
<p dir="auto">You might overwrite that method like so:</p>
<pre><code>static internal void PluginCleanUp()
{
    Win32.WritePrivateProfileString(sectionName, keyName, doCloseTag ? "1" : "0", iniFilePath);
    // dispose of your forms when cleaning up the plugin
    if (nonDockableForm != null &amp;&amp; !nonDockableForm.IsDisposed)
    {
        nonDockableForm.Close();
    }
    // also dispose of any other forms you have, in the same manner
}
</code></pre>
<p dir="auto">If you want <em>all my opinions on how to handle forms</em>, your best bet is to try to make sense of the <a href="https://github.com/molsonkiko/JsonToolsNppPlugin" rel="nofollow ugc">JsonTools source code</a>.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/91998</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/91998</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Sat, 13 Jan 2024 04:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Sat, 13 Jan 2024 01:19:09 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/91991">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Most C# plugins use Windows Forms to make dialogs, both dockable and otherwise. Check out this branch of my fork of the <a href="http://NotepadPlusPlusPluginPack.Net" rel="nofollow ugc">NotepadPlusPlusPluginPack.Net</a>  template, and pay special attention to the forms folder</p>
</blockquote>
<p dir="auto">I had to download the zip file to get your code.  When I cloned I was not getting your changes… Not sure why.</p>
<p dir="auto">I have one question right now.  Is there a way to show the DarkModeTestForm when a plugin is invoked?  In your example, DarkModeTestForm is displayed from the frmGoToLine form.  Could DarkModeTestForm be displayed directly when the user selects a plugin option say, Non Dockable Dialog Menu?  It may be a dumb question, but I had to ask.</p>
<p dir="auto">Thanks again!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/91996</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/91996</guid><dc:creator><![CDATA[Paul Baker]]></dc:creator><pubDate>Sat, 13 Jan 2024 01:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Fri, 12 Jan 2024 23:50:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://community.notepad-plus-plus.org/uid/26710">@Mark-Olson</a> said in <a href="/post/91991">How to create a C# plugin that uses a non-dockable dialog</a>:</p>
<blockquote>
<p dir="auto">Most C# plugins use Windows Forms to make dialogs, both dockable and otherwise. Check out this branch of my fork of the <a href="http://NotepadPlusPlusPluginPack.Net" rel="nofollow ugc">NotepadPlusPlusPluginPack.Net</a>  template, and pay special attention to the forms folder</p>
</blockquote>
<p dir="auto">Mark, this is just what I was looking for.  I’ll give it a look.  Thanks! Paul</p>
]]></description><link>https://community.notepad-plus-plus.org/post/91994</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/91994</guid><dc:creator><![CDATA[Paul Baker]]></dc:creator><pubDate>Fri, 12 Jan 2024 23:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to How to create a C# plugin that uses a non-dockable dialog on Fri, 12 Jan 2024 21:30:36 GMT]]></title><description><![CDATA[<p dir="auto">Most C# plugins use Windows Forms to make dialogs, both dockable and otherwise. Check out <a href="https://github.com/molsonkiko/NotepadPlusPlusPluginPack.Net/tree/apply_dark_mode_to_arbitrary_controls" rel="nofollow ugc">this branch of my fork of the NotepadPlusPlusPluginPack.Net</a> template, and pay special attention to <a href="https://github.com/molsonkiko/NotepadPlusPlusPluginPack.Net/tree/apply_dark_mode_to_arbitrary_controls/Demo%20Plugin/NppManagedPluginDemo/Forms" rel="nofollow ugc">the forms folder</a>.</p>
<p dir="auto">You can mostly ignore the <code>.Designer.cs</code> and <code>.resx</code> files, as those are automatically generated by Visual Studio when you use the designer GUI to make a form.</p>
<p dir="auto">Here’s an example of the GUI in action.</p>
<p dir="auto"><img src="/assets/uploads/files/1705095031193-0f59c83e-609c-4e1c-8afc-768b5d9b175c-image.png" alt="0f59c83e-609c-4e1c-8afc-768b5d9b175c-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://community.notepad-plus-plus.org/post/91991</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/91991</guid><dc:creator><![CDATA[Mark Olson]]></dc:creator><pubDate>Fri, 12 Jan 2024 21:30:36 GMT</pubDate></item></channel></rss>