<p>Has anyone used <a href="http://www.ayende.com/Blog/archive/2007/09/03/Rhino-Igloo-ndash-MVC-Framework-for-Web-Forms.aspx" rel="nofollow noreferrer">Rhino igloo</a> in a non-trivial project? I am curious if it's worth, what are its drawbacks, does it enhance testability a lot, is it easy to use. How would you compare it to a pure MVC framework (ASP.NET MVC)? Please share the experience.</p>

[{'answer_id': 72282, 'author': 'Nicholas Mancuso', 'author_id': 8945, 'author_profile': 'https://Stackoverflow.com/users/8945', 'pm_score': -1, 'selected': False, 'text': "<p>Don't the text boxes allow HTML usage? If that is the case, just use HTML to format the text into a table. Otherwise, try adding the text to a datagrid and then adding that to the form.</p>\n"}, {'answer_id': 72283, 'author': 'Matt Dawdy', 'author_id': 232, 'author_profile': 'https://Stackoverflow.com/users/232', 'pm_score': 1, 'selected': True, 'text': '<p>If you want, you can translate this VB.Net code to C#.  The theory here is that you change the size of a tab in the control.</p>\n\n<pre><code>Private Declare Function SendMessage _\n  Lib "user32" Alias "SendMessageA" _\n  (ByVal handle As IntPtr, ByVal wMsg As Integer, _\n  ByVal wParam As Integer, ByRef lParam As Integer) As Integer\n\n\nPrivate Sub SetTabStops(ByVal ctlTextBox As TextBox)\n\n  Const EM_SETTABSTOPS As Integer = &amp;HCBS\n\n  Dim tabs() As Integer = {20, 40, 80}\n\n  SendMessage(ctlTextBox.Handle, EM_SETTABSTOPS, _\n    tabs.Length, tabs(0))\n\nEnd Sub\n</code></pre>\n\n<p>I converted a version to C# for you, too.  Tested and working in VS2005.</p>\n\n<p>Add this using statement to your form:  </p>\n\n<pre><code>using System.Runtime.InteropServices;\n</code></pre>\n\n<p>Put this right after the class declaration:</p>\n\n<pre><code>    private const int EM_SETTABSTOPS = 0x00CB;\n    [DllImport("User32.dll", CharSet = CharSet.Auto)]\n    public static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, int[] lParam);\n</code></pre>\n\n<p>Call this method when you want to set the tabstops:</p>\n\n<pre><code>    private void SetTabStops(TextBox ctlTextBox)\n    {\n        const int EM_SETTABSTOPS = 203;\n        int[] tabs = { 100, 40, 80 };\n        SendMessage(textBox1.Handle, EM_SETTABSTOPS, tabs.Length, tabs);\n    }\n</code></pre>\n\n<p>To use it, here is all I did:</p>\n\n<pre><code>    private void Form1_Load(object sender, EventArgs e)\n    {\n        SetTabStops(textBox1);\n\n        textBox1.Text = "Hi\\tWorld";\n    }\n</code></pre>\n'}, {'answer_id': 72420, 'author': 'Ken Wootton', 'author_id': 7357, 'author_profile': 'https://Stackoverflow.com/users/7357', 'pm_score': 0, 'selected': False, 'text': "<p>If you want something truly tabular, Mr. Haren's answer is a good one.  The DataGridView will give you a very Excel spreadsheet type of look.</p>\n\n<p>If you just want a two column layout (similar to HTML's table), then try out the TableLayoutPanel.  It'll give you the layout you desire with the ability to use standard controls within each table cell.</p>\n"}, {'answer_id': 72627, 'author': 'bruceatk', 'author_id': 791, 'author_profile': 'https://Stackoverflow.com/users/791', 'pm_score': -1, 'selected': False, 'text': "<p>I believe the only way is to do something similar to what you are doing, but use a fixed font and do your own padding with spaces so that you don't have to worry about tab expansion.</p>\n"}, {'answer_id': 72659, 'author': 'AZDean', 'author_id': 12058, 'author_profile': 'https://Stackoverflow.com/users/12058', 'pm_score': 1, 'selected': False, 'text': '<p>Thanks Matt, your solution worked great for me. Here\'s my version of your code...</p>\n\n<pre><code>// This is a better way to pass in what tab stops I want...\nSetTabStops(textBox, new int[] { 12,120 });\n\n// And the code for the SetTabsStops method itself...\nprivate const uint EM_SETTABSTOPS = 0x00CB;\n\n[DllImport("User32.dll")]\nprivate static extern uint SendMessage(IntPtr hWnd, uint wMsg, int wParam, int[] lParam);\n\npublic static void SetTabStops(TextBox textBox, int[] tabs)\n{\n    SendMessage(textBox.Handle, EM_SETTABSTOPS, tabs.Length, tabs);\n}\n</code></pre>\n'}]
['https://Stackoverflow.com/questions/72204', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1801/']