2009-09-25 11 views
14

Me gustaría que el VS2008 automáticamente sangra los contenidos de una región. Una muestra probablemente sea la mejor.¿Cómo sangrar el contenido de la región con C#?

¿Qué es lo hace ahora:

#region [ Fields ] 
public int Count; 
public int Total; 
#endregion 

Lo que me gustaría es:

#region [ Fields ] 
    public int Count; 
    public int Total; 
#endregion 

¿Cómo puedo obtener VS para hacer esto?

EDIT: Por lo que vale, VS hace hacer esto en VB.NET.

+2

valdría la pena leer: http://stackoverflow.com/questions/1476550/c-any-standard-way-to-divide-a-class-into-regions/1476582#1476582 –

+3

Comentarios de interés y el horror de codificación el blog fue interesante. El comentario que más me interesó fue la analogía con un cirujano. Es decir. el paciente está cubierto, excepto donde el cirujano estará trabajando. Así es como mi mente funciona mejor, concéntrate en el problema que tienes entre manos. ¡Gracias por el diferente punto de vista! –

+0

¡Los comentarios típicos del programador C# en este artículo SO vinculado! Incluso si no te gustan las regiones (y lo hago, y pierdo el auto-sangrado que me dio VB), ¡sigue siendo una pregunta válida! –

Respuesta

4

¿Fuera de la caja? No puedes.

+1

¿Algún addin/tools que haría esto? –

+0

No es que yo sepa. ¡No uso regiones! Acabo de ver las opciones de ReSharper, pero no pude ver nada. –

+0

Downvoter: por favor, deje un comentario. Hacer lo contrario es improductivo. –

-1

Herramientas Opciones texto Editor C# aquí sangría inteligente Ident

+2

Esto realmente no sangra los contenidos de una región (al menos para mí). –

6

Esta macro debe trabajar, en su mayor parte:

Public Sub IndentRegions() 
    'Assume that the document has been smart formatted 
    Dim TS As TextSelection = DTE.ActiveDocument.Selection 
    TS.SelectAll() 
    Dim lines As String() = TS.Text.Split(vbNewLine) 

    Dim level As Integer = 0 

    TS.StartOfDocument() 

    While Not TS.ActivePoint.AtEndOfDocument 

     If lines(TS.ActivePoint.Line - 1).Trim().StartsWith("#endregion") Then 
      level = level - 1 
     End If 

     For i = 1 To level 
      TS.Indent() 
     Next 

     If lines(TS.ActivePoint.Line - 1).Trim().StartsWith("#region") Then 
      level = level + 1 
     End If 

     TS.LineDown() 
     TS.StartOfLine() 
    End While 
End Sub 
+1

Gracias por la macro. Esto hace lo que se sugiere (suponiendo que realices una selección ... ¡DOH!): Sangra las líneas debajo de una región. Sin embargo, tan pronto como uso Ctl + K + D para reformatear, ¡el trabajo se deshace! Entonces, por ahora, solo estoy viviendo con eso. –

+0

Puede escribir una macro que realice el formato inteligente y luego ejecuta regiones de sangría. No sé si podría volver a asignar Ctrl + K D a la macro (estoy seguro de que podría mapear otra secuencia de teclas). –

+0

Esa es una buena idea ... Voy a intentar eso. –

1

Yo diría que la única manera de simular esto es para usar llaves "{" y "}" dentro de las regiones, delimitando su bloque de código. Desafortunadamente, esto solo funciona dentro de los códigos Functions and Methods, por lo tanto, esto no funcionará para su ejemplo. En algunos casos, la delimitación de bloques de código podría ser incompatible y requerir ajustes de acuerdo con la lógica de su código.

function Test(){ 

    #region Example 
    { 
     your code 
    } 
    #end region 

} 
3

Cambiar el color de fondo a otro color que no sea el fondo de la página principal (que utiliza la plata en la parte superior del blanco) y que dará a esa sangría siente que usted está buscando.

Options>Environment>Fonts and Colors> elementos de la pantalla: Preprocessor Keyword y luego cambiar el menú desplegable item background.

+1

me encanta esta respuesta. hay sangrías y sangrías :) – timothy

+1

Esto funciona bien, no lo que se pidió, pero tiene el truco de resaltar visualmente las regiones. – MaurGi

Cuestiones relacionadas